diff --git a/docs/site-spec/SITE_SPEC.md b/docs/site-spec/SITE_SPEC.md new file mode 100644 index 0000000..70cd531 --- /dev/null +++ b/docs/site-spec/SITE_SPEC.md @@ -0,0 +1,217 @@ +# meez Recipe App — Site Specification (Phase 1 Discovery) + +Source of truth: this document + reference screenshots under `generated/site-spec/screenshots/`. All colors/typography/geometry are exact computed values (CSS px at 1440×900 unless noted). Phase-1 scope: frontend UI discovery only. Network/API contracts intentionally excluded (user decision). + +--- + +## 1. Site Overview + +- **App**: meez — restaurant recipe management web app (authenticated SPA). +- **Base**: `https://app.getmeez.com/`; entered at `home?type=recipe&orderBy=last_viewed&direction=desc` (no redirect). +- **Framework**: React SPA in `#root`, **Material UI 5** components (`MuiGrid2`, `MuiAppBar`, `MuiChip`, `MuiTab`, `MuiDialog`, `MuiMenu`…) with JSS-generated class names (`jssNNNN`), webpack chunk bundles (`main.ddfec8b1.js`, `NNNN.hash.chunk.js`). No common framework globals detected; bundle naming is webpack. +- **Extensions/widgets observed**: Intercom chat iframe, candu A/B component (``), Google Tag Manager (`gtm.js`), Recurly billing (`recurly.js`, `recurly.css`), Google Material Icons font. +- **Auth**: logged-in session (owner identity shown as initials `NW` in list Owner columns). Title format: `{Page} - meez` (list pages), `{RecipeName} - Recipe - {Folder} - meez` (editor). +- **Core concept**: single "home" list view switched by `type` query param: `recipe`, `ingredient`, `recipebook`, `doc`, `purchased_item`. Recipe creation is a wizard (name → paste ingredients/prep → editor). Recipe editor is a two-column workspace with tabs. +- **Upgrade-gated features (never attempted, per user directive)**: Menus nav tab ("Upgrade" pill), New→Menu, New→Count Sheet, editor Nutrition tab ("Upgrade" suffix). Purchase-import services (Invoice Processing, Inventory integrations) mentioned in help copy as contact-gated. + +## 2. Route Inventory + +All list routes share the same shell (header + nav pill row + list). URL pattern: `/home?type={type}&orderBy={orderBy}&direction={dir}` (+ optional `query=`). + +| Route | URL (type=) | Purpose | Major unique components | Notes | +|---|---|---|---|---| +| Recipes | `recipe` | Recipe list | list rows (thumb, name, owner, last-viewed), row kebab menu, sort combobox, search | orderBy: last_viewed, name, date_created, modified, shared; 3-4 recipes | +| Ingredients | `ingredient` | Ingredient library | section header "Needs Attention:", svg type icons, Filter chip shows count `(1)` | 19-20 items; older rows show date (`Aug 12, 2026`) instead of relative time | +| Menus | — | Menu builder | — | **GATED** (`Upgrade` pill next to nav label); route not accessed | +| Recipe Books | `recipebook` | Recipe book collections | 5-column grid incl. "Recipes/Docs" count column | rows: "Sample Recipes" (2), "Get Started With Meez" (4) | +| Docs | `doc` | Help documents | 4-column grid, no Owner values | meez-authored docs (FAQ, how-tos) | +| New Purchase Items | `purchased_item` | Purchase imports needing attention | **empty state**: success message + "Tool Tip / Purchase items" help panel | no items → explanatory card; sort defaults to `created` | +| Recipe editor | `/recipes/{id}/steps?conceptId={id}` | Recipe editing workspace | 2-column editor, tab bar, ingredient table, prep method cards, additional details | title `{name} - Recipe - {folder} - meez`; see §8 | + +Navigation: header has logo/back icon (x32), "All" text tab, search box, right-side "New" cluster (add icon + contained "New" button); pill-tab row below lists the six library types with live count badges. `New` button opens a menu: Recipe, Recipe Book, Menu (gated), Doc, Count Sheet (gated), Import, Export. + +## 3. Global Design System + +- **No CSS custom properties** on `:root` (design tokens are hardcoded MUI/JSS values). +- **Body**: bg `#F3F3F3`, text `#050841`, font CircularCustCapNum, 16px, weight 300, line-height 20px, margin 0. +- **Header (MUI AppBar)**: bg `#FBFBFB`, height 80px, sticky, z-index 1100. +- **Primary brand blue**: `#3D5DF6` — contained buttons, links, selected dropdown items, active sort. +- **Navy**: `#050841` (body text, Share button bg), `#202962` (breadcrumb text, 12px/400). +- **Secondary gray**: `#A5A9C1` (icon buttons); header icon color `rgba(0,0,0,0.54)`; tab text `#3C4679` (500 weight). +- **Active pill bg**: `#DBE4FF`; active editor tab bg `#F1F5FE`; active row/select text blue. +- **Radius scale**: pills 100px (buttons) / 99px (nav chips) / 20px (chips) / 10px (dialogs) / 4px (tabs, selects) / 50% (icon buttons). +- **Shadows**: MUI elevation system (dialogs: `0 11px 15px -7px rgba(0,0,0,.2), 0 24px 38px 3px rgba(0,0,0,.14), 0 9px 46px 8px rgba(0,0,0,.12)`; backdrop `rgba(0,0,0,0.5)`). +- **Buttons**: default text 16px/500; contained = blue bg, white text, pill; icon buttons 24-40px, radius 50%. +- **Spacing rhythm** (repeated values): 8px (row grid gap), 12px (chip/button padding X), 16px (menu option padding, card margins), 20px, 24px, 32px, 40px (dialog padding `30px 38px`), 80px, 160px (content column margins at ≥1440). + +## 4. Typography + +Primary family: **CircularCustCapNum** (custom, all UI text; Arial fallback for some icon buttons; Roboto also loaded for MUI defaults; Material Icons font for glyph icons). + +| Use | Size | Weight | Line-height | Color | Notes | +|---|---|---|---|---|---| +| Body/default | 16px | 300 | 20px | `#050841` | | +| Header buttons ("All", "New", "Done") | 16px | 500 | — | `#3C4679` / white / gray | | +| Nav pill labels | 16px | 400 | 30px | `rgba(0,0,0,0.87)` | h40 pills | +| List titles (links) | 16px | 300 | 20px | `#3D5DF6` (blue link) | | +| List secondary (owner, time) | 16px | 300 | 20px | `#3D5DF6` / `#050841` | time-ago is a blue link | +| Sort combobox | 14px | 400 | 23px | `#050841` | | +| Editor tab labels | 15px | 400 | — | `#050841` | active tab bg `#F1F5FE` | +| Editor input values | 14px | 400 | — | `rgba(0,0,0,0.87)` | | +| Breadcrumb | 12px | 400 | 16px | `#202962` | | +| Section headers ("Needs Attention:") | 16px | 300 | — | `#050841` | | + +Letter-spacing normal throughout; no text-transform observed. + +## 5. Colors + +| Token | Value | Usage | +|---|---|---| +| Ink | `#050841` | body text, Share button bg | +| Primary blue | `#3D5DF6` | contained buttons, links, selected states | +| Page bg | `#F3F3F3` | app background | +| Surface | `#FFFFFF` | rows, cards, dialogs | +| Header bg | `#FBFBFB` | app bar, list header row | +| Active pill | `#DBE4FF` | selected nav chip | +| Active tab bg | `#F1F5FE` | selected editor tab | +| Tab text | `#3C4679` | header "All" tab, unselected | +| Icon gray | `#A5A9C1` | icon buttons, filter icons | +| Icon faint | `rgba(0,0,0,0.54)` | header icon buttons | +| Disabled | `#DADADA` text on `#40B49A` bg | Done button (disabled state) | +| Success green | `#40B49A` | Done button bg | +| Row divider | `#F3F3F3` | row bottom border (0.74px) | +| Backdrop | `rgba(0,0,0,0.5)` | modal scrim | + +## 6. Spacing / Layout Conventions + +- **Content column**: at 1440px, list column is 1120px centered (x=160, margins 160). At ≤1024: margins collapse to 24px (list x=24, w=1057); at ≤768: full-width (x=0-24); at 390: x=16, w=358. +- **Grid lists**: CSS grid rows, 8px gap; list header row 57px bg `#FBFBFB`; data rows 57px white, bottom border `#F3F3F3`; cells vertically centered. +- **Recipe list columns** (1120 total): 36 (checkbox) | 112 (Type thumb 24×24) | 560 (Name) | 0 (hidden) | 112 (Owner initials) | 224 (Last viewed) | 36 (actions 24×24). +- **Recipe Book columns**: 56 | 84 | 516 | 144 (Recipes/Docs count) | 100 | 172 | 48. +- **Header**: logo icon 28×28 at x32 y26; "All" tab x72 y18; right cluster New icon+button at x1258/1274 y24 (each 32px tall); nav pill row y≈106 (h40, gap 8px); Filter chip right-aligned (h44). +- **Editor**: two columns — ingredient table left (x125-460), prep/details right (x≈778+). Tab bar h48 at y48. Header h80. +- **Padding norms**: chips `8px 16px 8px 12px`; dialog `30px 38px`; menu `8px 0`; menu options `6px 16px`; contained buttons `0 12px`. + +## 7. Reusable Components + +- **Nav pill chips** (MuiChip-filled/outlined): h40, radius 99px, label 16px/400; active bg `#DBE4FF`; live count in label (e.g., "Recipes 4"); Filter chip variant h44 radius 20px, icon+label. +- **List row**: checkbox (20×20 MUI) + type icon (24×24, svg for ingredients) + name link + owner initials (20px) + time link + 2 icon buttons (24×24, radius 50%): favorite/open + kebab. +- **Row kebab menu** (MUI Menu, portal): width 275, options 16px/300 pad `6px 16px`; items: Add to Recipe Book, Grant view access, Send a copy, Make a copy, Export, Print, Delete. +- **Sort combobox** (MUI Select): 14px, pad `4px 32px 5px 0`; dropdown 196w; selected option blue 400. +- **Search textbox**: 16px input, pad `8px 0 6px`, placeholder "Search "; commits on Enter → `query=` param; count badges live-filter. +- **Buttons**: contained (blue pill, 16px/500), text, icon (radius 50%); "New" = add icon + contained button pair; "Done" = green pill disabled until saved state; "Share" = navy pill (`#050841`). +- **Dialogs**: 700w radius 10px (create wizard), 900w (steps wizard); white bg, pad `30px 38px`; backdrop `rgba(0,0,0,0.5)`; footer buttons Cancel (text) + primary pill (250×48). +- **Form fields**: text inputs 14px, pad `10px 12px`, borderless underline (MUI); FilledInput variants in editor ("Qty", "Unit", "Station Name", "Tag Name" placeholders). +- **Empty state card**: white, pad `0 40px 80px`, title + help text (purchase items page). +- **Editor controls**: "Add Header"/"Add Note" buttons, "Bulk Add"/"Add Ingredients" (outlined, opens textarea dialog 583×320), Total Yield Qty+Unit inputs, toggles "Auto calculate total yield", "Calculate %". + +## 8. Per-Route Specification + +### 8.1 Recipes list (`/home?type=recipe`) +Header + nav + list as §6. Row: checkbox | Type thumb (24×24) | Name (blue link) | Owner initials | relative time link | action icons. Sort options: Last Modified, Last Viewed, Date Created, Last Modified, Date Shared (direction arrows keyboard_arrow_up/arrow_downward toggle asc/desc). Search filters live with `query=` param; nav badges update (Recipes 1…). Screenshots: `home@1440w.png` (3 rows), `home@1440w-sort-open.png`, `home@1440w-row-menu.png`, `home@1440w-search.png`, `home@1024w.png`, `home@768w.png`, `home@390w.png`. + +### 8.2 Ingredients (`/home?type=ingredient`) +Same shell; section header "Needs Attention:" (16px/300, y189); rows have SVG type icons; Filter chip shows `(1)`. Older items show `Aug 12, 2026` date format. Screenshots: `ingredients@1440w.png`, `ingredients@1024w.png`, `ingredients@768w.png`, `ingredients@390w.png`. + +### 8.3 Recipe Books (`/home?type=recipebook`) +5-column grid incl. Recipes/Docs count; loading state shows "Loading...". Screenshots: `recipe-books@1440w.png`, `recipe-books@390w.png`. + +### 8.4 Docs (`/home?type=doc`) +4-column grid; meez-authored docs; no Owner values. Screenshots: `docs@1440w.png`, `docs@390w.png`. + +### 8.5 New Purchase Items (`/home?type=purchased_item`) +Empty state: "Your purchase items are up to date!" + help panel (upload template / Invoice Processing Service / Inventory integrations — services contact-gated). Screenshots: `purchase-items@1440w.png`, `purchase-items@390w.png`. + +### 8.6 Recipe create wizard +1. **Create Recipe dialog** (700×636, r10): fields Recipe Name (583×40, 14px), Owner radio "Personal" (disabled for single-user), Folder radio "First Concept", "Add to Recipe Book (optional)" search (placeholder "Search existing recipe books or create new"); buttons Cancel + Next (250×48 blue pill). Screenshot: `recipe-create-modal@1440w.png`. +2. **Add Ingredients & Prep Method dialog** (900×742): Ingredients textarea (387×320) + Prep Method textarea, tip text "(note)" syntax and "To Garnish:" header syntax; buttons Skip + Add Recipe. Screenshot: `recipe-steps-wizard@1440w.png`. +3. On Add Recipe → `/recipes/{id}/steps?conceptId={id}` editor. + +### 8.7 Recipe editor (`/recipes/{id}/steps`) +- Header: logo/back icons, breadcrumb `Home / First Concept / Recipes` (12px/400 `#202962`), **Done** (green pill `#40B49A`, disabled in initial state), **Share** (navy pill `#050841`), New cluster, kebab. +- **Tab bar** (h48, y48): Prep Method (active bg `#F1F5FE`), Cost, UoM Equivalency, Nutrition **Upgrade** (gated). At ≤768 an **Ingredients** tab is prepended; at 390 tabs shrink to 70w each in a scrollable bar. +- **Left column — ingredient table**: header "Total Yield" with toggles "Auto calculate total yield" / "Calculate %"; columns Qty (83w) / Ingredient (220w, autocomplete → library match, e.g. "Test Flour"→"Flour") / Notes (232w); tip "Enter to complete, Tab to add a note"; Add Header / Add Note buttons; Add Ingredients (outlined) opens textarea dialog. +- **Right column**: "Add Cover Image" (landscape recommended), **Prep Method** section (step cards: "1." + "Drag & Drop or click to add an image or a video — File should not excede 200mb or 2 min"), Add Header / Add Note. +- **Additional Details** (right, y≈791): Shelf Life, Station Name input, Tag Name input, Owner accordion (radio "First Concept"). +- **Cost tab**: adds "Calculate %" toggle context; **UoM Equivalency tab**: "U of M Equivalency" rows (Weight = / Volume = / Each =), help text, "Standard Weight - Volume Conversion" toggle (locked to 8oz = 1 cup when on). +- Screenshots: `recipe-editor@1440w.png`, `recipe-editor-cost@1440w.png`, `recipe-editor-uom@1440w.png`, `recipe-editor@1024w.png`, `recipe-editor@768w.png`, `recipe-editor@390w.png`. + +## 9. Responsive Behavior + +Viewports emulated (CDP): 1440×900, 1024×768, 768×1024, 390×844 (real window 1157×744 @ dpr 1.35; captures at physical 1296×810 for 1440). + +| Breakpoint | Header | Nav | List column | Notes | +|---|---|---|---|---| +| ≥1440 | 80px, one row | pill row y106 | x160, w1120 | | +| 1024 | 80px | y106 | x24, w1057 (margins 160→24) | Filter chip stays right | +| 768 | **120px** (wraps to 2 rows) | y144 | x0, w768 full-bleed | editor: Ingredients tab appears; Filter moves to header row (y76) | +| 390 | **140px** (3 rows) | y148, horizontally scrollable (chips ≥390 wide) | x16, w358 | editor tabs 70w scrollable; New cluster icon-only (no text button found in header at 390) | + +Inferred breakpoints from layout transitions: ~1200 (margins collapse), ~900 (header grows, nav row wraps), ~600 (full-bleed list, compact tabs). + +## 10. Interaction / State Behavior + +- **Search**: type + Enter → URL `query=` param, list filters, count badges update, sort resets to `unsorted`; clearing restores. +- **Sort**: combobox pick → list reorders; arrow icons toggle direction (`direction=asc/desc`); URL reflects `orderBy`/`direction`. +- **Row kebab**: menu with 7 actions (Add to Recipe Book, Grant view access, Send a copy, Make a copy, Export, Print, Delete). Delete NOT exercised (only for test recipe cleanup). +- **Row hover**: second action icon reveals (24×24 buttons, both present in DOM). +- **New menu** (MuiListItemButton list, 375×348): Recipe / Recipe Book / Menu (gated) / Doc / Count Sheet (gated) / Import / Export; opens create wizard (Recipe) — DOM click required; real-mouse clicks failed to activate popover items on the relay (implementation detail for automation). +- **Create wizard**: modal steps; "Next" advances; "Add Recipe" creates draft and opens editor at `/recipes/{id}/steps?conceptId={id}`. +- **Editor dirty state**: Done button disabled initially (green `#40B49A` + gray text); enabled state not observed (not triggered). +- **Ingredient autocomplete**: typing in Ingredient cell matches library ingredients (e.g., "Test Flour" → "Flour"); Qty/Unit cells per row ("g", "ea"). +- **Filter chip**: no observable panel opened via mouse on relay; documented as inert in this environment (possible relay input quirk) — flag for manual verification. +- **Loading states**: list routes show "Loading..." while fetching; empty states (purchase items) show guidance card. +- **Dialogs**: ESC and Cancel close; backdrop `rgba(0,0,0,0.5)` click closes (standard MUI). + +## 11. Asset Inventory + +| Asset | Source/type | Dimensions | Where used | Behavior | +|---|---|---|---|---| +| CircularCustCapNum | `fonts.css` (custom @font-face) | — | all UI text | primary font | +| Material Icons | Google `icon?family=Material+Icons` | — | glyph icons | icon font | +| Roboto | MUI default | — | fallback | | +| MUI SvgIcon set | inline SVG, viewBox 0 0 24 24 | 20 (small) / 24 (medium) | all controls (add, kebab, arrows, filter, share) | `MuiSvgIcon-root` classes; icon font Material Icons also used | +| Logo | header icon button (svg) + "FC" text in editor breadcrumb | 28×28 / 27×27 | app bar left | | +| Thumbnails | list Type column | 24×24 div/svg | rows | ingredients = svg icons | +| Cover image | user upload (editor "Add Cover Image", landscape) | up to 200MB / 2min video | editor right column | drag&drop or click | +| Intercom widget | iframe | — | floating chat | third-party | +| candu component | `` | — | A/B overlays | third-party | +| gtm/recurly scripts | external JS | — | analytics/billing | third-party | + +## 12. Animation Behavior + +- Menus/popovers (New menu, kebab, sort dropdown): MUI Grow/Fade entry — sampled mid-transition `transition: all`, settling to `background-color 0.15s cubic-bezier(0.4,0,0.2,1)`; entry completes <300ms (opacity 1, transform none at rest). Standard MUI durations (~195-225ms, cubic-bezier(0.4,0,0.2,1)). +- Dialog open: MUI Dialog fade+zoom with backdrop fade; backdrop `rgba(0,0,0,0.5)`. +- Hover: row action icons reveal (opacity/visibility); no transform motion observed. +- No entrance animations on list content observed; loading = text "Loading...". + +## 13. Reference Screenshot Index + +All under `generated/site-spec/screenshots/` (PNG; 1440 captures at 1296×810 physical): + +| File | Route | Viewport | +|---|---|---| +| home@1440w.png | Recipes list | 1440×900 | +| home@1440w-sort-open.png | Recipes, sort dropdown open | 1440×900 | +| home@1440w-row-menu.png | Recipes, row kebab menu | 1440×900 | +| home@1440w-search.png | Recipes, search "banana" | 1440×900 | +| home@1024w.png / home@768w.png / home@390w.png | Recipes list | 1024 / 768 / 390 | +| ingredients@1440w.png, @1024w, @768w, @390w | Ingredients list | all four | +| recipe-books@1440w.png, @390w | Recipe Books | 1440 / 390 | +| docs@1440w.png, @390w | Docs | 1440 / 390 | +| purchase-items@1440w.png, @390w | Purchase items empty state | 1440 / 390 | +| recipe-create-modal@1440w.png | Create wizard step 1 | 1440×900 | +| recipe-steps-wizard@1440w.png | Create wizard step 2 | 1440×900 | +| recipe-editor@1440w.png, @1024w, @768w, @390w | Recipe editor | all four | +| recipe-editor-cost@1440w.png / recipe-editor-uom@1440w.png | Editor Cost / UoM tabs | 1440×900 | + +## 14. Unknowns / Things That Could Not Be Observed + +- **Upgrade-gated (not attempted, per directive)**: Menus nav + editor flow; New→Menu; New→Count Sheet; editor Nutrition tab; purchase-import services (Invoice Processing, Inventory integrations — contact-gated). +- **Filter chip**: clicking produced no observable panel in this environment (possible relay input quirk); needs manual verification — expected to open a filter drawer/menu. +- **Done button enabled state**: disabled in initial editor state; enabling trigger (save/dirty) not observed — manual check needed. +- **Row action icons** (24×24 pair): exact icon semantics (favorite vs open) not labeled in DOM; inferred from position. +- **Ingredient detail view**: row click navigation target (ingredient editor) not opened (read-only constraint on non-test data). +- **Recipe detail/share flows**: Share menu, Grant view access, Send a copy, Export/Print outputs not exercised. +- **Real window**: native 1157×744 @ dpr 1.35 — all captures used CDP-emulated viewports; physical vs CSS px scaling noted. +- **Test recipe** `OMP DISCOVERY TEST` (id 1210817): created for editor discovery, deleted at phase cleanup via row kebab → Delete → confirm dialog ("Delete recipe?" + "Recipe Deleted Successfully" toast). diff --git a/package.json b/package.json index a6ca758..866431e 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,8 @@ "@types/node": "^22.10.0", "typescript": "5.9.2", "vitest": "4.1.10" + }, + "allowScripts": { + "esbuild@0.28.2": true } } diff --git a/src/styles/global.css b/src/styles/global.css index 1499192..49dc50d 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -51,7 +51,7 @@ p { line-height:1.65; } .quality-summary { display:grid; grid-template-columns:repeat(auto-fit,minmax(9rem,1fr)); gap:1rem; padding-bottom:1rem; }.quality-summary article { display:flex; flex-direction:column; padding:1.1rem; background:var(--card); border:1px solid var(--line); }.quality-summary strong { font:600 2.25rem var(--serif); color:var(--green); }.quality-summary span { color:var(--muted); font-size:.78rem; }.quality-table td:first-child { text-align:left; }.quality-table small { display:block; }.quality-table td:not(:first-child) { font-size:.82rem; } .app-launcher { display:grid; grid-template-columns:repeat(auto-fit,minmax(15rem,1fr)); gap:1rem; padding-bottom:6rem; }.app-launcher a { position:relative; min-height:14rem; padding:1.4rem; color:var(--ink); background:var(--card); border:1px solid var(--line); text-decoration:none; }.app-launcher h2 { margin:.45rem 0; }.app-launcher strong { position:absolute; top:1.2rem; right:1.2rem; font:600 1.5rem var(--serif); color:var(--green); }.app-launcher p { color:var(--muted); }.entity-list { padding-bottom:6rem; }.entity-list-head,.entity-list > a { display:grid; grid-template-columns:minmax(16rem,2fr) repeat(3,minmax(6rem,1fr)); align-items:center; gap:1rem; padding:.8rem 1rem; border-bottom:1px solid var(--line); }.entity-list-head { color:var(--muted); font-size:.68rem; text-transform:uppercase; letter-spacing:.08em; }.entity-list > a { color:var(--ink); text-decoration:none; }.entity-list > a:hover { background:var(--card); }.entity-list small { display:block; color:var(--muted); }.empty-state { padding:3rem; text-align:center; background:var(--card); border:1px solid var(--line); } .ingredient-list-tools { display:flex; justify-content:flex-end; padding-block:1rem; }.filter-menu { position:relative; }.filter-menu summary { padding:.65rem .85rem; color:white; background:var(--green); cursor:pointer; font-weight:700; list-style:none; }.filter-menu summary::-webkit-details-marker { display:none; }.filter-menu form { position:absolute; z-index:4; right:0; width:min(20rem,calc(100vw - 2rem)); padding:1rem; background:var(--card); border:1px solid var(--line); box-shadow:0 .75rem 2rem rgba(30,35,25,.14); }.filter-menu label { display:flex; align-items:center; gap:.55rem; padding:.35rem 0; }.filter-menu fieldset { margin:.75rem 0; padding:.75rem; border:1px solid var(--line); }.filter-menu legend { color:var(--muted); font-size:.72rem; text-transform:uppercase; letter-spacing:.06em; }.filter-menu form > div { display:flex; align-items:center; gap:1rem; }.filter-menu button { padding:.6rem .8rem; color:white; background:var(--green); border:0; cursor:pointer; font-weight:700; }.ingredient-entity-list .entity-list-head,.ingredient-entity-list > a { grid-template-columns:minmax(16rem,1fr) 7rem; }.attention-reasons { display:flex; flex-wrap:wrap; gap:.35rem; margin-top:.4rem; }.attention-reasons em { padding:.18rem .4rem; color:#8b321f; background:#f3dfd4; font-size:.68rem; font-style:normal; font-weight:700; text-transform:uppercase; letter-spacing:.04em; } -.directory-workspace { padding-block:28px 72px; }.workspace-pills { display:flex; align-items:center; flex-wrap:wrap; gap:10px; overflow:visible; padding:0 0 28px; }.workspace-pills > a { display:inline-flex; align-items:center; gap:8px; flex:none; min-height:42px; padding:7px 13px; color:#18234b; background:white; border:1px solid #e5e7ef; border-radius:22px; text-decoration:none; font-weight:700; box-shadow:0 1px 2px rgba(15,23,42,.03); }.workspace-pills > a.active { background:#e9efff; border-color:#e9efff; }.workspace-pills > a small { color:#a0a7ba; font-size:.8rem; font-weight:500; }.workspace-pill-icon { display:grid; place-items:center; width:22px; height:22px; color:white; background:#48558d; border-radius:50%; font-size:.7rem; }.workspace-pill-icon.ingredient,.workspace-pill-icon.purchase { background:#489d96; }.workspace-pill-icon.book { background:#6847ed; }.workspace-pills .filter-menu { flex:none; margin-left:auto; }.workspace-pills .filter-menu summary { color:#172033; background:transparent; white-space:nowrap; }.ingredient-directory { overflow:hidden; background:white; border:1px solid #eef0f5; }.ingredient-selection-bar { display:grid; grid-template-columns:28px 1fr auto; align-items:center; min-height:58px; gap:18px; padding:0 22px; border-bottom:1px solid #eef0f5; }.ingredient-selection-bar input,.ingredient-directory-row > input { width:17px; height:17px; margin:0; accent-color:#4868f7; }.ingredient-selection-bar strong { color:#5366fa; font-size:.9rem; }.ingredient-selection-bar button { color:#64748b; background:transparent; border:0; cursor:pointer; }.ingredient-directory-row { display:grid; grid-template-columns:28px 34px minmax(14rem,1fr) 10rem 28px; align-items:center; min-height:60px; gap:18px; padding:0 22px; border-bottom:1px solid #eef0f5; }.ingredient-directory-row:last-child { border-bottom:0; }.ingredient-directory-row:hover { background:#f8faff; }.ingredient-directory-row.selected { background:#edf2ff; }.ingredient-type-icon { display:grid; place-items:center; width:26px; height:26px; color:white; background:#489d96; border-radius:50%; font-size:.65rem; }.ingredient-directory-name { color:#111a49; text-decoration:none; }.ingredient-directory-name strong { font-size:.9rem; }.ingredient-directory-name small { display:flex; gap:5px; margin-top:3px; }.ingredient-directory-name em { padding:2px 5px; color:#9a3412; background:#fff0e8; border-radius:3px; font-size:.62rem; font-style:normal; font-weight:700; text-transform:uppercase; }.ingredient-usage { color:#8b93a7; font-size:.82rem; text-align:right; }.ingredient-row-menu { color:#a0a7ba; font-size:1.45rem; line-height:1; text-align:center; text-decoration:none; } +.directory-workspace { padding-block:28px 72px; }.workspace-pills { display:flex; align-items:center; flex-wrap:wrap; gap:10px; overflow:visible; padding:0 0 28px; }.workspace-pills > a { display:inline-flex; align-items:center; gap:8px; flex:none; min-height:42px; padding:7px 13px; color:rgba(0,0,0,0.87); background:white; border:1px solid #e5e7ef; border-radius:999px; text-decoration:none; font-weight:400; box-shadow:0 1px 2px rgba(15,23,42,.03); }.workspace-pills > a.active { background:#DBE4FF; border-color:#DBE4FF; }.workspace-pills > a small { color:#a0a7ba; font-size:.8rem; font-weight:500; }.workspace-pill-icon { display:grid; place-items:center; width:22px; height:22px; color:white; background:#48558d; border-radius:50%; font-size:.7rem; }.workspace-pill-icon.ingredient,.workspace-pill-icon.purchase { background:#489d96; }.workspace-pill-icon.book { background:#6847ed; }.workspace-pills .filter-menu { flex:none; margin-left:auto; }.workspace-pills .filter-menu summary { color:#172033; background:transparent; white-space:nowrap; }.ingredient-directory { overflow:hidden; background:white; border:1px solid #eef0f5; }.ingredient-selection-bar { display:grid; grid-template-columns:28px 1fr auto; align-items:center; min-height:58px; gap:18px; padding:0 22px; border-bottom:1px solid #eef0f5; }.ingredient-selection-bar input,.ingredient-directory-row > input { width:17px; height:17px; margin:0; accent-color:#4868f7; }.ingredient-selection-bar strong { color:#5366fa; font-size:.9rem; }.ingredient-selection-bar button { color:#64748b; background:transparent; border:0; cursor:pointer; }.ingredient-directory-row { display:grid; grid-template-columns:28px 34px minmax(14rem,1fr) 10rem 28px; align-items:center; min-height:60px; gap:18px; padding:0 22px; border-bottom:1px solid #eef0f5; }.ingredient-directory-row:last-child { border-bottom:0; }.ingredient-directory-row:hover { background:#f8faff; }.ingredient-directory-row.selected { background:#edf2ff; }.ingredient-type-icon { display:grid; place-items:center; width:26px; height:26px; color:white; background:#489d96; border-radius:50%; font-size:.65rem; }.ingredient-directory-name { color:#111a49; text-decoration:none; }.ingredient-directory-name strong { font-size:.9rem; }.ingredient-directory-name small { display:flex; gap:5px; margin-top:3px; }.ingredient-directory-name em { padding:2px 5px; color:#9a3412; background:#fff0e8; border-radius:3px; font-size:.62rem; font-style:normal; font-weight:700; text-transform:uppercase; }.ingredient-usage { color:#8b93a7; font-size:.82rem; text-align:right; }.ingredient-row-menu { color:#a0a7ba; font-size:1.45rem; line-height:1; text-align:center; text-decoration:none; } .workspace-directory-list { overflow:hidden; background:white; border:1px solid #eef0f5; }.workspace-directory-heading,.workspace-directory-row { display:grid; grid-template-columns:34px minmax(16rem,1fr) 9rem 10rem 28px; align-items:center; gap:18px; padding:0 22px; }.workspace-directory-heading { min-height:42px; color:#8b93a7; border-bottom:1px solid #eef0f5; font-size:.72rem; text-transform:uppercase; letter-spacing:.04em; }.workspace-directory-heading strong { grid-column:2; }.workspace-directory-row { min-height:64px; color:#111a49; border-bottom:1px solid #eef0f5; text-decoration:none; }.workspace-directory-row:last-child { border-bottom:0; }.workspace-directory-row:hover { background:#f8faff; }.workspace-directory-row > span:nth-child(2) { display:flex; flex-direction:column; min-width:0; }.workspace-directory-row small { overflow:hidden; color:#8b93a7; text-overflow:ellipsis; white-space:nowrap; }.workspace-directory-row b { color:#a0a7ba; font-size:1.35rem; text-align:center; }.workspace-directory-heading:has(+ .books),.workspace-directory-row.books { grid-template-columns:34px minmax(16rem,1fr) 9rem 28px; }.workspace-directory-heading:has(+ .purchases),.workspace-directory-row.purchases { grid-template-columns:34px minmax(14rem,1fr) minmax(10rem,1fr) 9rem 7rem 28px; } .workspace-search-tools { display:flex; align-items:flex-start; gap:10px; margin-bottom:18px; }.workspace-global-search { display:flex; align-items:center; gap:10px; flex:1; max-width:680px; min-height:44px; padding:0 14px; background:white; border:1px solid #dfe3ec; border-radius:7px; }.workspace-global-search:focus-within { border-color:#7185ec; box-shadow:0 0 0 3px #e9efff; }.workspace-global-search > span { color:#818aa0; font-size:1.35rem; }.workspace-global-search input[type="search"] { flex:1; min-width:0; padding:10px 0; color:#111a49; background:transparent; border:0; outline:0; font:inherit; }.workspace-global-search a { color:#818aa0; font-size:1.35rem; text-decoration:none; }.search-type-filter { position:relative; }.search-type-filter summary { min-height:44px; padding:11px 14px; color:#172033; background:white; border:1px solid #dfe3ec; border-radius:7px; cursor:pointer; font-weight:700; list-style:none; white-space:nowrap; }.search-type-filter summary::-webkit-details-marker { display:none; }.search-type-filter form { position:absolute; z-index:5; right:0; width:220px; padding:12px; background:white; border:1px solid #dfe3ec; border-radius:7px; box-shadow:0 .75rem 2rem rgba(30,35,25,.14); }.search-type-filter label { display:flex; align-items:center; gap:8px; padding:6px 2px; }.search-type-filter form > div { display:flex; align-items:center; gap:12px; margin-top:10px; }.search-type-filter button { padding:7px 10px; color:white; background:#48558d; border:0; border-radius:5px; cursor:pointer; font-weight:700; }.workspace-search-results > p { color:#687086; font-size:.86rem; }.workspace-search-results > div { overflow:hidden; background:white; border:1px solid #eef0f5; }.workspace-search-results > div > a { display:grid; grid-template-columns:34px minmax(12rem,1fr) 9rem 24px; align-items:center; gap:16px; min-height:62px; padding:0 22px; color:#111a49; border-bottom:1px solid #eef0f5; text-decoration:none; }.workspace-search-results > div > a:last-child { border-bottom:0; }.workspace-search-results > div > a:hover { background:#f8faff; }.workspace-search-results > div > a > span:nth-child(2) { display:flex; flex-direction:column; min-width:0; }.workspace-search-results small { overflow:hidden; color:#8b93a7; text-overflow:ellipsis; white-space:nowrap; }.workspace-search-results em { color:#8b93a7; font-size:.75rem; font-style:normal; text-align:right; text-transform:uppercase; }.workspace-search-results b { color:#a0a7ba; font-size:1.3rem; } .workspace-tabs { display:flex; flex-wrap:wrap; gap:.5rem; margin-top:1.5rem; }.workspace-tabs a { padding:.55rem .75rem; color:var(--ink); background:var(--card); border:1px solid var(--line); text-decoration:none; }.ingredient-workspace { display:grid; gap:1.25rem; padding-bottom:6rem; }.workspace-panel { scroll-margin-top:1rem; padding:1.25rem; background:var(--card); border:1px solid var(--line); }.workspace-panel h2 { margin-top:0; }.workspace-panel > label { display:grid; grid-template-columns:minmax(9rem,1fr) 3fr; gap:1rem; align-items:center; margin:.75rem 0; color:var(--muted); }.workspace-panel input,.workspace-panel textarea,.workspace-panel select { padding:.65rem; color:var(--ink); background:var(--paper); border:1px solid var(--line); font:1rem var(--sans); }.inline-form { display:flex; flex-wrap:wrap; gap:.55rem; align-items:center; margin-top:1rem; padding-top:1rem; border-top:1px solid var(--line); }.inline-form button { padding:.7rem; color:white; background:var(--green); border:1px solid var(--green); cursor:pointer; }.purchase-row { display:grid; grid-template-columns:minmax(12rem,1fr) auto auto; gap:1rem; align-items:center; padding:.7rem 0; border-bottom:1px solid var(--line); }.purchase-row small { display:block; color:var(--muted); } @@ -129,7 +129,7 @@ th { font-size:.7rem; letter-spacing:.06em; } .create-entity { max-width:720px; padding-bottom:72px; } .entity-detail-shell,.recipe-detail-shell { width:min(1500px,calc(100% - 48px)); margin:0 auto; padding:24px 0 72px; color:#101a4a; } .entity-detail-header { display:flex; align-items:flex-start; justify-content:space-between; gap:24px; min-height:108px; border-bottom:1px solid #e8eaf0; }.entity-detail-header h1 { margin:8px 0 2px; font:700 clamp(1.7rem,2.4vw,2.35rem) var(--sans); letter-spacing:-.035em; }.entity-detail-header p { margin:0; color:#858da2; }.entity-breadcrumb a { color:#26346d; font-size:.82rem; text-decoration:none; }.identity-edit { position:relative; }.identity-edit > summary { padding:8px 15px; color:#4868f7; border:1px solid #4868f7; border-radius:20px; cursor:pointer; font-weight:700; list-style:none; }.identity-edit > summary::-webkit-details-marker { display:none; }.identity-edit > form { position:absolute; z-index:8; right:0; width:min(390px,calc(100vw - 32px)); padding:18px; background:white; border:1px solid #dfe3ec; border-radius:7px; box-shadow:0 .75rem 2rem rgba(30,35,25,.16); }.identity-edit label { display:grid; gap:4px; margin-bottom:10px; color:#737c91; font-size:.75rem; }.identity-edit input,.identity-edit select,.identity-edit textarea { width:100%; padding:9px; border:1px solid #dfe3ec; }.identity-edit button { padding:9px 12px; color:white; background:#4868f7; border:0; border-radius:5px; font-weight:700; }.entity-notice { margin:14px 0; }.entity-detail-grid { display:grid; grid-template-columns:minmax(0,1.02fr) minmax(0,.98fr); min-height:720px; }.entity-primary { padding:48px 42px 40px 0; border-right:1px solid #e8eaf0; }.entity-secondary { min-width:0; padding-left:32px; }.entity-section { margin-bottom:54px; }.entity-section h2,.entity-tab-panel h2 { margin:0 0 8px; font:700 1.35rem var(--sans); }.prep-action-table { margin-top:34px; }.prep-action-table th,.prep-action-table td { padding:13px 8px; text-align:left; border-bottom:1px solid #edf0f5; }.prep-action-table th { color:#9098aa; font-size:.72rem; font-weight:500; }.inline-editor { margin-top:20px; }.inline-editor > summary { color:#4868f7; cursor:pointer; font-weight:700; list-style:none; }.additional-card { min-height:260px; padding:28px; border:1px solid #e8eaf0; }.additional-card > details { padding:16px 0; }.additional-card summary { cursor:pointer; font-weight:700; }.additional-card summary small { margin-left:5px; color:#9aa2b5; }.additional-card ul { padding-left:20px; }.additional-card li { display:flex; justify-content:space-between; gap:10px; padding:6px 0; }.entity-tabs { display:flex; position:sticky; top:0; z-index:3; background:var(--paper); border-bottom:1px solid #e8eaf0; }.entity-tabs button { flex:1; padding:18px 10px; color:#111a49; background:transparent; border:0; border-bottom:2px solid transparent; cursor:pointer; font-weight:700; }.entity-tabs button.active { border-bottom-color:#4868f7; }.entity-tab-panel { display:none; padding:42px 0; background:transparent; border:0; }.entity-tab-panel.active { display:block; }.equivalency-list p { display:grid; grid-template-columns:1fr auto 1fr; gap:12px; padding:14px 4px; border-bottom:1px solid #e8eaf0; }.equivalency-list p small { grid-column:1/-1; color:#8b93a7; }.entity-secondary .purchase-item-form { grid-template-columns:repeat(2,minmax(0,1fr)); }.entity-secondary .purchase-name,.entity-secondary .purchase-rate { grid-column:1/-1; } -.recipe-detail-shell { width:min(1600px,calc(100% - 48px)); }.recipe-detail-shell .entity-detail-header { min-height:92px; }.recipe-workspace-tabs { display:flex; justify-content:flex-end; border-bottom:1px solid #e8eaf0; }.recipe-workspace-tabs a { min-width:150px; padding:16px 18px; color:#111a49; border-bottom:2px solid transparent; text-align:center; text-decoration:none; font-weight:700; }.recipe-workspace-tabs a.active { border-bottom-color:#4868f7; }.recipe-overview-strip { display:flex; align-items:flex-start; justify-content:space-between; gap:24px; padding:18px 0; }.recipe-overview-form { flex:1; }.recipe-overview-form > details > summary { color:#4868f7; cursor:pointer; font-weight:700; }.recipe-overview-form fieldset { max-width:720px; margin-top:15px; }.recipe-yield-summary { display:flex; align-items:baseline; gap:12px; min-width:260px; padding:12px 16px; border:1px solid #e8eaf0; }.recipe-yield-summary span,.recipe-yield-summary small { color:#8b93a7; }.recipe-structure-workspace { border-top:1px solid #e8eaf0; }.recipe-structure-workspace .structure-editor { display:grid; grid-template-columns:minmax(0,1fr) minmax(420px,.92fr); column-gap:32px; }.recipe-structure-workspace .section-heading { grid-column:1/-1; }.recipe-structure-workspace .component-editor,.recipe-structure-workspace > .structure-editor > .secondary-action { grid-column:1; }.recipe-structure-workspace .method-editor { grid-column:2; grid-row:2 / span 40; min-width:0; padding-left:32px; border-left:1px solid #e8eaf0; }.recipe-structure-workspace .component-editor { border-color:#e8eaf0; background:white; }.recipe-structure-workspace .editor-items { min-width:46rem; }.recipe-structure-workspace .method-editor li { padding:15px; border:1px solid #e8eaf0; }.recipe-history { margin-top:30px; padding:18px; border:1px solid #e8eaf0; }.recipe-history summary { cursor:pointer; font-weight:700; }.recipe-history li span,.recipe-history li small { display:block; color:#8b93a7; } +.recipe-detail-shell { width:min(1600px,calc(100% - 48px)); }.recipe-detail-shell .entity-detail-header { min-height:92px; }.recipe-workspace-tabs { display:flex; justify-content:flex-end; border-bottom:1px solid #f3f3f3; }.recipe-workspace-tabs a { min-width:150px; padding:16px 18px; color:#111a49; border-bottom:2px solid transparent; text-align:center; text-decoration:none; font-weight:700; }.recipe-workspace-tabs a.active { border-bottom-color:#4868f7; }.recipe-overview-strip { display:flex; align-items:flex-start; justify-content:space-between; gap:24px; padding:18px 0; }.recipe-overview-form { flex:1; }.recipe-overview-form > details > summary { color:#4868f7; cursor:pointer; font-weight:700; }.recipe-overview-form fieldset { max-width:720px; margin-top:15px; }.recipe-yield-summary { display:flex; align-items:baseline; gap:12px; min-width:260px; padding:12px 16px; border:1px solid #e8eaf0; }.recipe-yield-summary span,.recipe-yield-summary small { color:#8b93a7; }.recipe-structure-workspace { border-top:1px solid #e8eaf0; }.recipe-structure-workspace .structure-editor { display:grid; grid-template-columns:minmax(0,1fr) minmax(420px,.92fr); column-gap:32px; }.recipe-structure-workspace .section-heading { grid-column:1/-1; }.recipe-structure-workspace .component-editor,.recipe-structure-workspace > .structure-editor > .secondary-action { grid-column:1; }.recipe-structure-workspace .method-editor { grid-column:2; grid-row:2 / span 40; min-width:0; padding-left:32px; border-left:1px solid #e8eaf0; }.recipe-structure-workspace .component-editor { border-color:#e8eaf0; background:white; }.recipe-structure-workspace .editor-items { min-width:46rem; }.recipe-structure-workspace .method-editor li { padding:15px; border:1px solid #e8eaf0; }.recipe-history { margin-top:30px; padding:18px; border:1px solid #e8eaf0; }.recipe-history summary { cursor:pointer; font-weight:700; }.recipe-history li span,.recipe-history li small { display:block; color:#8b93a7; } @media (max-width:980px) { .entity-detail-grid { grid-template-columns:1fr; }.entity-primary { padding-right:0; border-right:0; }.entity-secondary { padding-left:0; }.recipe-structure-workspace .structure-editor { grid-template-columns:1fr; }.recipe-structure-workspace .method-editor { grid-column:1; grid-row:auto; padding-left:0; border-left:0; }.recipe-structure-workspace .component-editor,.recipe-structure-workspace > .structure-editor > .secondary-action { grid-column:1; } } @media (max-width:620px) { .entity-detail-shell,.recipe-detail-shell { width:calc(100% - 24px); padding-top:16px; }.entity-detail-header { min-height:90px; }.entity-primary { padding-top:28px; }.entity-tabs button span { display:none; }.recipe-workspace-tabs { overflow-x:auto; justify-content:flex-start; }.recipe-overview-strip { flex-direction:column-reverse; }.recipe-yield-summary { width:100%; }.recipe-structure-workspace .editor-items { min-width:42rem; } } .immersive-main { min-height:100vh; background:#fff; }.immersive-main .entity-detail-shell,.immersive-main .recipe-detail-shell { width:100%; max-width:none; margin:0; padding:0 0 72px; }.detail-utility { display:flex; align-items:center; justify-content:flex-end; gap:18px; min-height:58px; padding:7px 28px; border-bottom:1px solid #e8eaf0; }.detail-utility form { width:min(560px,42vw); }.detail-utility input { width:100%; min-height:42px; padding:8px 14px; border:1px solid #e5e8ef; border-radius:4px; font:inherit; }.detail-utility > a { color:#26346d; text-decoration:none; font-weight:700; }.detail-utility .detail-new { padding:9px 16px; color:white; background:#4868f7; border-radius:21px; }.immersive-main .entity-detail-header { width:52%; min-height:128px; padding:26px 38px; border-right:1px solid #e8eaf0; }.immersive-main .entity-notice { width:calc(52% - 76px); margin:12px 38px; }.immersive-main .entity-detail-grid { grid-template-columns:52% 48%; }.immersive-main .entity-primary { padding:48px 38px; }.immersive-main .entity-secondary { padding:0 30px; }.immersive-main .recipe-detail-shell .entity-detail-header { width:52%; padding:22px 38px; }.immersive-main .recipe-workspace-tabs { width:48%; margin:-92px 0 30px 52%; min-height:92px; align-items:end; padding:0 22px; }.immersive-main .recipe-overview-strip { width:52%; min-height:150px; padding:20px 38px; border-right:1px solid #e8eaf0; }.immersive-main .recipe-structure-workspace { padding:0 38px; }.immersive-main .recipe-structure-workspace .structure-editor { grid-template-columns:minmax(0,52fr) minmax(420px,48fr); column-gap:0; }.immersive-main .recipe-structure-workspace .section-heading { padding-right:32px; }.immersive-main .recipe-structure-workspace .component-editor,.immersive-main .recipe-structure-workspace > .structure-editor > .secondary-action { margin-right:32px; }.immersive-main .recipe-structure-workspace .method-editor { padding-left:32px; }.immersive-main .recipe-history { margin-inline:38px; } @@ -191,8 +191,8 @@ th { font-size:.7rem; letter-spacing:.06em; } .application-body .entity-detail-shell .entity-section h2,.application-body .entity-detail-shell .entity-tab-panel h2 { color:#050841; font-size:22px; font-weight:700; line-height:1.25; } .application-body .entity-detail-shell .panel-intro { max-width:640px; margin:5px 0 20px; color:#95969c; font-size:14px; line-height:1.5; } .application-body .entity-detail-shell .entity-tabs { position:relative; min-height:58px; background:#fff; border-color:#f3f3f3; } -.application-body .entity-detail-shell .entity-tabs button { min-height:58px; padding:8px 12px; color:#050841; border-bottom-width:2px; font-size:13px; font-weight:600; } -.application-body .entity-detail-shell .entity-tabs button.active { color:#050841; border-bottom-color:#3d5df6; } +.application-body .entity-detail-shell .entity-tabs button { min-height:58px; padding:8px 12px; color:#050841; font-size:15px; font-weight:400; } +.application-body .entity-detail-shell .entity-tabs button.active { color:#050841; background:#f1f5fe; border-bottom:0; } .application-body .entity-detail-shell .entity-tab-panel { padding:35px 2px 60px; } .application-body .entity-detail-shell .prep-action-table { width:100%; margin-top:26px; table-layout:fixed; } .application-body .entity-detail-shell .prep-action-table th { height:40px; padding:8px 10px; color:#757677; background:#fbfbfb; border-color:#f3f3f3; font-size:12px; } @@ -255,9 +255,9 @@ th { font-size:.7rem; letter-spacing:.06em; } .bakers-base-summary input,.bakers-base-summary select { min-width:0; padding:3px 2px; color:#26346d; background:transparent; border:0; font:inherit; } .bakers-base-summary input { width:100%; text-align:right; } .bakers-base-summary select { max-width:48px; color:#3d5df6; } -.entity-directory-table { background:#fff; border:1px solid #eef0f5; }.entity-directory-toolbar { display:grid; grid-template-columns:24px minmax(12rem,1fr) auto auto; align-items:center; gap:14px; min-height:58px; padding:0 20px; border-bottom:1px solid #eef0f5; }.entity-directory-toolbar input,.entity-directory-row > input { width:17px; height:17px; margin:0; accent-color:#4868f7; }.entity-directory-toolbar strong { color:#5366fa; font-size:.88rem; }.entity-directory-toolbar button { padding:7px 10px; color:#64748b; background:transparent; border:0; cursor:pointer; }.entity-directory-toolbar .bulk-delete { color:#a73838; }.directory-error { margin:0; padding:11px 20px; color:#8d2e2e; background:#fff1f1; border-bottom:1px solid #f5cece; }.entity-directory-head,.entity-directory-row { display:grid; align-items:center; gap:14px; padding:0 20px; }.entity-directory-head { grid-template-columns:24px 28px minmax(14rem,1fr) repeat(var(--directory-columns),minmax(7rem,10rem)) 28px; min-height:38px; color:#8b93a7; border-bottom:1px solid #eef0f5; font-size:.7rem; text-transform:uppercase; }.entity-directory-head > span:first-child { grid-column:1/3; }.entity-directory-row { grid-template-columns:24px 28px minmax(14rem,1fr) repeat(var(--directory-columns),minmax(7rem,10rem)) 28px; min-height:62px; border-bottom:1px solid #eef0f5; }.entity-directory-row:last-child { border-bottom:0; }.entity-directory-row:hover { background:#f8faff; }.entity-directory-row.selected { background:#edf2ff; }.entity-directory-head.columns-1,.entity-directory-row.columns-1 { --directory-columns:1; }.entity-directory-head.columns-2,.entity-directory-row.columns-2 { --directory-columns:2; }.entity-directory-head.columns-3,.entity-directory-row.columns-3 { --directory-columns:3; }.entity-directory-name { display:flex; flex-direction:column; min-width:0; }.entity-directory-name a { overflow:hidden; color:#111a49; text-decoration:none; text-overflow:ellipsis; white-space:nowrap; }.entity-directory-name small { color:#8b93a7; }.directory-attention { display:flex; gap:5px; }.directory-attention em { padding:2px 5px; color:#9a3412; background:#fff0e8; border-radius:3px; font-size:.62rem; font-style:normal; font-weight:700; text-transform:uppercase; }.entity-directory-value { overflow:hidden; color:#687086; font-size:.82rem; text-overflow:ellipsis; white-space:nowrap; }.entity-row-actions { position:relative; }.entity-row-actions > summary { color:#a0a7ba; cursor:pointer; font-size:1.4rem; list-style:none; text-align:center; }.entity-row-actions > summary::-webkit-details-marker { display:none; }.entity-row-actions > div { position:absolute; z-index:5; top:28px; right:0; width:130px; padding:5px; background:#fff; border:1px solid #dfe3ec; border-radius:5px; box-shadow:0 8px 22px rgba(20,30,60,.14); }.entity-row-actions a,.entity-row-actions button { display:block; width:100%; padding:8px 10px; color:#26346d; background:transparent; border:0; text-align:left; text-decoration:none; cursor:pointer; }.entity-row-actions button { color:#a73838; }.entity-row-actions a:hover,.entity-row-actions button:hover { background:#f7f8fc; } +.entity-directory-table { background:#fff; border:1px solid #eef0f5; }.entity-directory-toolbar { display:grid; grid-template-columns:24px minmax(12rem,1fr) auto auto; align-items:center; gap:14px; min-height:58px; padding:0 20px; border-bottom:1px solid #eef0f5; }.entity-directory-toolbar input,.entity-directory-row > input { width:17px; height:17px; margin:0; accent-color:#3d5df6; }.entity-directory-toolbar strong { color:#5366fa; font-size:.88rem; }.entity-directory-toolbar button { padding:7px 10px; color:#64748b; background:transparent; border:0; cursor:pointer; }.entity-directory-toolbar .bulk-delete { color:#a73838; }.directory-error { margin:0; padding:11px 20px; color:#8d2e2e; background:#fff1f1; border-bottom:1px solid #f5cece; }.entity-directory-head,.entity-directory-row { display:grid; align-items:center; gap:14px; padding:0 20px; }.entity-directory-head { grid-template-columns:24px 28px minmax(14rem,1fr) repeat(var(--directory-columns),minmax(7rem,10rem)) 28px; min-height:38px; color:#8b93a7; border-bottom:1px solid #eef0f5; font-size:.7rem; text-transform:uppercase; }.entity-directory-head > span:first-child { grid-column:1/3; }.entity-directory-row { grid-template-columns:24px 28px minmax(14rem,1fr) repeat(var(--directory-columns),minmax(7rem,10rem)) 28px; min-height:62px; border-bottom:1px solid #eef0f5; }.entity-directory-row:last-child { border-bottom:0; }.entity-directory-row:hover { background:#f8faff; }.entity-directory-row.selected { background:#edf2ff; }.entity-directory-head.columns-1,.entity-directory-row.columns-1 { --directory-columns:1; }.entity-directory-head.columns-2,.entity-directory-row.columns-2 { --directory-columns:2; }.entity-directory-head.columns-3,.entity-directory-row.columns-3 { --directory-columns:3; }.entity-directory-name { display:flex; flex-direction:column; min-width:0; }.entity-directory-name a { overflow:hidden; color:#111a49; text-decoration:none; text-overflow:ellipsis; white-space:nowrap; }.entity-directory-name small { color:#8b93a7; }.directory-attention { display:flex; gap:5px; }.directory-attention em { padding:2px 5px; color:#9a3412; background:#fff0e8; border-radius:3px; font-size:.62rem; font-style:normal; font-weight:700; text-transform:uppercase; }.entity-directory-value { overflow:hidden; color:#687086; font-size:.82rem; text-overflow:ellipsis; white-space:nowrap; }.entity-row-actions { position:relative; }.entity-row-actions > summary { color:#a0a7ba; cursor:pointer; font-size:1.4rem; list-style:none; text-align:center; }.entity-row-actions > summary::-webkit-details-marker { display:none; }.entity-row-actions > div { position:absolute; z-index:5; top:28px; right:0; width:130px; padding:5px; background:#fff; border:1px solid #dfe3ec; border-radius:5px; box-shadow:0 8px 22px rgba(20,30,60,.14); }.entity-row-actions a,.entity-row-actions button { display:block; width:100%; padding:8px 10px; color:#26346d; background:transparent; border:0; text-align:left; text-decoration:none; cursor:pointer; }.entity-row-actions button { color:#a73838; }.entity-row-actions a:hover,.entity-row-actions button:hover { background:#f7f8fc; } @media (max-width:760px) { .entity-directory-table { border-inline:0; }.entity-directory-head { display:none; }.entity-directory-row,.entity-directory-row.columns-1,.entity-directory-row.columns-2,.entity-directory-row.columns-3 { grid-template-columns:24px 28px minmax(0,1fr) 28px; padding-inline:14px; }.entity-directory-value { display:none; }.entity-directory-toolbar { padding-inline:14px; }.entity-directory-toolbar strong { min-width:0; }.entity-directory-toolbar button { padding-inline:4px; } } -.delete-confirmation { width:min(430px,calc(100% - 32px)); padding:24px; color:#172033; background:#fff; border:0; border-radius:8px; box-shadow:0 20px 60px rgba(15,23,42,.25); }.delete-confirmation::backdrop { background:rgba(15,23,42,.42); }.delete-confirmation h2 { margin:0 30px 10px 0; font:700 1.35rem var(--sans); }.delete-confirmation p { margin:0 0 24px; color:#64748b; }.delete-confirmation > div { display:flex; justify-content:flex-end; gap:10px; }.delete-confirmation button { padding:9px 14px; background:#fff; border:1px solid #d6dbe5; border-radius:5px; cursor:pointer; font-weight:700; }.delete-confirmation .confirm-delete { color:#fff; background:#b93838; border-color:#b93838; }.delete-confirmation .dialog-close { position:absolute; top:14px; right:14px; padding:2px 7px; color:#788197; border:0; font-size:1.25rem; } +.delete-confirmation { width:min(430px,calc(100% - 32px)); padding:24px; color:#172033; background:#fff; border:0; border-radius:10px; box-shadow:0 20px 60px rgba(15,23,42,.25); }.delete-confirmation::backdrop { background:rgba(0,0,0,0.5); }.delete-confirmation h2 { margin:0 30px 10px 0; font:700 1.35rem var(--sans); }.delete-confirmation p { margin:0 0 24px; color:#64748b; }.delete-confirmation > div { display:flex; justify-content:flex-end; gap:10px; }.delete-confirmation button { padding:9px 14px; background:#fff; border:1px solid #d6dbe5; border-radius:5px; cursor:pointer; font-weight:700; }.delete-confirmation .confirm-delete { color:#fff; background:#b93838; border-color:#b93838; }.delete-confirmation .dialog-close { position:absolute; top:14px; right:14px; padding:2px 7px; color:#788197; border:0; font-size:1.25rem; } .entity-directory-head,.entity-directory-row,.entity-directory-head.columns-1,.entity-directory-head.columns-2,.entity-directory-head.columns-3,.entity-directory-row.columns-1,.entity-directory-row.columns-2,.entity-directory-row.columns-3 { grid-template-columns:24px 28px minmax(14rem,1fr) 28px; }.entity-directory-head > span:first-child { grid-column:auto; }.entity-directory-head > span:nth-child(2) { text-align:center; }.entity-directory-name { justify-content:center; }.entity-directory-toolbar { min-height:52px; } /* Application interface skin. */ @@ -270,7 +270,7 @@ th { font-size:.7rem; letter-spacing:.06em; } --green:#3d5df6; --orange:#647df8; color:#050841; - background:#fbfbfb; + background:#f3f3f3; font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; font-size:14px; font-weight:400; @@ -311,7 +311,7 @@ th { font-size:.7rem; letter-spacing:.06em; } .application-body .workspace-new-menu small,.application-body .detail-new-menu small { overflow:hidden; color:#8b93a7; font-size:12px; font-weight:400; text-overflow:ellipsis; white-space:nowrap; } /* Menu treatment: quiet white surfaces, navy text, roomy rows. */ -.application-body .workspace-new-menu > summary,.application-body .detail-new-menu > summary { grid-template-columns:18px auto; gap:6px; min-height:40px; padding:7px 15px 7px 11px; border-radius:22px; box-shadow:none; } +.application-body .workspace-new-menu > summary,.application-body .detail-new-menu > summary { grid-template-columns:18px auto; gap:6px; min-height:40px; padding:7px 15px 7px 11px; border-radius:999px; box-shadow:none; } .application-body .new-trigger-plus { font-size:20px; } .application-body .workspace-new-menu > nav,.application-body .detail-new-menu > div { width:340px; padding:16px 0; border-color:#e6e7ee; border-radius:4px; box-shadow:0 2px 5px rgba(5,8,65,.18); } .application-body .workspace-new-menu > nav a,.application-body .detail-new-menu > div a { grid-template-columns:32px minmax(0,1fr); gap:14px; min-height:50px; padding:8px 28px; border-radius:0; } @@ -335,20 +335,21 @@ th { font-size:.7rem; letter-spacing:.06em; } .application-body .entity-row-actions a:hover,.application-body .entity-row-actions button:hover { background:#f1f5fe; } .application-body .identity-edit > form { border-color:#e6e7ee; border-radius:4px; box-shadow:0 2px 5px rgba(5,8,65,.18); } .application-body .workspace-pills { gap:8px; padding:0 0 38px; } -.application-body .workspace-pills > a { min-height:38px; padding:6px 13px 6px 8px; color:#202962; border:1px solid #ededf2; border-radius:20px; box-shadow:none; font-size:14px; font-weight:500; } +.application-body .workspace-pills > a { min-height:38px; padding:6px 13px 6px 8px; color:rgba(0,0,0,0.87); border:1px solid #ededf2; border-radius:999px; box-shadow:none; font-size:14px; font-weight:400; } .application-body .workspace-pills > a:hover { border-color:#cfd5fa; background:#f8f9ff; } -.application-body .workspace-pills > a.active { color:#3d5df6; background:#f1f5fe; border-color:#f1f5fe; } +.application-body .workspace-pills > a.active { background:#DBE4FF; border-color:#DBE4FF; } .application-body .workspace-pills > a small { color:#a5a9c1; font-size:12px; } .application-body .workspace-pill-icon { width:25px; height:25px; background:#647df8; font-size:10px; font-weight:700; } .application-body .workspace-pill-icon.ingredient,.application-body .workspace-pill-icon.purchase { background:#40b49a; } .application-body .workspace-pill-icon.book { background:#6234f2; } +.application-body .workspace-pills > a .workspace-pill-icon { width:18px; height:18px; color:inherit; background:transparent; } .application-body .workspace-pills .filter-menu summary { min-height:38px; padding:9px 12px; color:#202962; font-size:13px; font-weight:500; } .application-body .entity-directory-table,.application-body .workspace-search-results > div { overflow:visible; border:0; background:#fff; } -.application-body .entity-directory-toolbar { grid-template-columns:24px minmax(12rem,1fr) auto auto; min-height:60px; padding:0 20px; border-bottom:1px solid #eeeef3; } +.application-body .entity-directory-toolbar { grid-template-columns:24px minmax(12rem,1fr) auto auto; min-height:60px; padding:0 20px; border-bottom:1px solid #f3f3f3; } .application-body .entity-directory-toolbar strong { color:#3d5df6; font-size:13px; font-weight:600; } .application-body .entity-directory-toolbar button { color:#647df8; font-size:13px; } .application-body .entity-directory-toolbar .bulk-delete { color:#f63d48; } -.application-body .entity-directory-row,.application-body .entity-directory-row.columns-1,.application-body .entity-directory-row.columns-2,.application-body .entity-directory-row.columns-3 { grid-template-columns:24px 30px minmax(14rem,1fr) 28px; gap:14px; min-height:60px; padding:0 20px; border-bottom:1px solid #eeeef3; } +.application-body .entity-directory-row,.application-body .entity-directory-row.columns-1,.application-body .entity-directory-row.columns-2,.application-body .entity-directory-row.columns-3 { grid-template-columns:24px 30px minmax(14rem,1fr) 28px; gap:14px; min-height:57px; padding:0 20px; border-bottom:1px solid #f3f3f3; } .application-body .entity-directory-table.read-only .entity-directory-row { grid-template-columns:30px minmax(0,1fr); } .application-body .entity-directory-row:hover { background:#f8faff; } .application-body .entity-directory-row.selected { background:#f1f5fe; } @@ -360,21 +361,20 @@ th { font-size:.7rem; letter-spacing:.06em; } /* Full-width entity workspaces */ .application-body .immersive-main { color:#050841; background:#fff; } -.application-body .detail-utility { min-height:58px; padding:8px 28px; border-color:#eeeef3; } -.application-body .detail-utility input { min-height:40px; color:#050841; border-color:#e4e5ed; border-radius:4px; } +.application-body .detail-utility { min-height:58px; padding:8px 28px; background:#fbfbfb; border-color:#f3f3f3; } .application-body .detail-utility input::placeholder { color:#a5a9c1; } .application-body .detail-utility > a { color:#202962; font-size:13px; font-weight:500; } .application-body .immersive-main .entity-detail-header { min-height:164px; padding:25px 38px; border-color:#eeeef3; } .application-body .entity-detail-header h1 { margin:9px 0 4px; color:#050841; font-size:28px; font-weight:600; line-height:1.18; letter-spacing:-.025em; } .application-body .entity-detail-header p { color:#a5a9c1; font-size:13px; } .application-body .entity-breadcrumb a { color:#647df8; font-size:13px; } -.application-body .identity-edit > summary { padding:7px 15px; color:#3d5df6; border-color:#3d5df6; border-radius:18px; font-size:13px; font-weight:600; } +.application-body .identity-edit > summary { padding:7px 15px; color:#3d5df6; border-color:#3d5df6; border-radius:999px; font-size:13px; font-weight:600; } .application-body .immersive-main .entity-detail-grid,.application-body .immersive-main .recipe-structure-workspace .structure-editor { border-color:#eeeef3; } .application-body .immersive-main .entity-primary { padding:42px 38px; border-color:#eeeef3; } .application-body .immersive-main .entity-secondary { padding:0 32px; } -.application-body .entity-tabs { min-height:58px; border-color:#eeeef3; } -.application-body .entity-tabs button,.application-body .recipe-workspace-tabs button { padding:17px 10px; color:#202962; font-size:14px; font-weight:500; } -.application-body .entity-tabs button.active,.application-body .recipe-workspace-tabs button.active { color:#3d5df6; border-bottom-color:#3d5df6; } +.application-body .entity-tabs { min-height:58px; border-color:#f3f3f3; } +.application-body .entity-tabs button,.application-body .recipe-workspace-tabs button { padding:17px 10px; color:#202962; font-size:15px; font-weight:400; } +.application-body .entity-tabs button.active,.application-body .recipe-workspace-tabs button.active { color:#050841; background:#f1f5fe; border-bottom:0; } .application-body .entity-tab-panel { padding-top:38px; } .application-body .entity-section { margin-bottom:48px; } .application-body .entity-section h2,.application-body .entity-tab-panel h2,.application-body .recipe-view-method h2 { font-size:20px; font-weight:600; } @@ -386,7 +386,7 @@ th { font-size:.7rem; letter-spacing:.06em; } /* Recipe workspace and controls */ .application-body .immersive-main .recipe-detail-shell .entity-detail-header { min-height:116px; padding:20px 38px; } -.application-body .immersive-main .recipe-workspace-tabs { border-color:#eeeef3; } +.application-body .immersive-main .recipe-workspace-tabs { border-color:#f3f3f3; } .application-body .recipe-overview-strip { border-color:#eeeef3; } .application-body .recipe-yield-summary { border-color:#eeeef3; border-radius:2px; } .application-body .recipe-yield-summary span,.application-body .recipe-yield-summary small { color:#a5a9c1; } @@ -397,10 +397,14 @@ th { font-size:.7rem; letter-spacing:.06em; } .application-body table td { color:#202962; } .application-body th,.application-body td { border-color:#eeeef3; } .application-body input:not([type="checkbox"]):not([type="radio"]),.application-body select,.application-body textarea { color:#050841; border-color:#e4e5ed; border-radius:3px; } +.application-body .detail-utility input[type="search"] { min-height:40px; color:#050841; background:transparent; border:0; border-bottom:1px solid #e4e5ed; border-radius:0; } .application-body button { border-radius:3px; } .application-body .primary-command,.application-body .editor-actions button,.application-body .inline-form button { background:#3d5df6; } .application-body .recipe-view-method li { border-color:#eeeef3; } .application-body .recipe-view-method li > strong { color:#647df8; } +.application-body .detail-utility .detail-new { background:#3d5df6; border-radius:999px; } +.application-body .edit-command { color:#3d5df6; border-color:#3d5df6; border-radius:999px; } +.application-body .ingredient-purchase-form .purchase-form-actions button { border-radius:999px; } .application-body .nutrition-source,.application-body .muted { color:#a5a9c1; } .application-body .recipe-edit-nutrition { width:48%; margin-left:52%; padding:38px 32px 56px; border-top:1px solid #eeeef3; border-left:1px solid #eeeef3; } .application-body .nutrition-readiness { max-width:560px; margin-bottom:28px; } @@ -869,7 +873,7 @@ th { font-size:.7rem; letter-spacing:.06em; } .application-body .formula-conversion-warning { margin:8px 0 0; color:#9a3412; font-size:12px; } /* Persistent detail breadcrumbs. */ -.application-body .immersive-main .detail-utility { position:absolute; z-index:30; top:0; left:0; right:0; width:100%; height:58px; min-height:58px; display:grid; grid-template-columns:52% 48%; gap:0; padding:0; background:#fff; border-bottom:1px solid #eeeef3; } +.application-body .immersive-main .detail-utility { position:absolute; z-index:30; top:0; left:0; right:0; width:100%; height:58px; min-height:58px; display:grid; grid-template-columns:52% 48%; gap:0; padding:0; background:#fbfbfb; border-bottom:1px solid #f3f3f3; } .application-body .detail-context,.application-body .detail-tools { display:flex; align-items:center; min-width:0; height:58px; } .application-body .detail-context { gap:14px; padding:0 28px; } .application-body .detail-tools { gap:18px; padding:7px 28px; border-left:1px solid #eeeef3; }