diff --git a/.planning/milestones/v1.14.22-REQUIREMENTS.md b/.planning/milestones/v1.14.22-REQUIREMENTS.md new file mode 100644 index 00000000..cad8e4d0 --- /dev/null +++ b/.planning/milestones/v1.14.22-REQUIREMENTS.md @@ -0,0 +1,29 @@ +# Requirements Archive: v1.14.22 + +**Milestone:** Config Consolidation & Infrastructure +**Status:** 100% COMPLETE + +--- + +## 1. Functional Requirements (Archived) +- [x] **R-01: Centralized Configuration**: All environment settings must live in the `config/` directory. +- [x] **R-02: Secret Separation**: Production secrets must be stored in `secrets.yaml` and excluded from Git. +- [x] **R-03: Multi-Domain Schema**: Config must be split into `backend`, `frontend`, `network`, and `docker` domains. +- [x] **R-04: Python Tooling**: All deployment and management scripts must be implemented in Python with consistent logging. +- [x] **R-05: Dynamic Topology**: The system must automatically calculate API endpoints from the `server_ip` defined in `network.yaml`. +- [x] **R-06: Unified Auth Mgmt**: Admin UI must save LDAP settings directly to the YAML configuration. + +--- + +## 2. Technical Quality Requirements +- [x] **Q-01: Type Compliance**: No bold/medium font weights in the UI. +- [x] **Q-02: Copywriting**: Contextual CTA labels for all destructive or safety-critical actions. +- [x] **Q-03: Backward Compatibility**: Legacy `inventory.env` support maintained during the transition (deprecated). +- [x] **Q-04: Security**: Masked secrets in logs and subprocess injection protection. + +--- + +## 3. Requirement Outcomes +- **Validated**: YAML configuration significantly improved developer experience and deployment reliability. +- **Adjusted**: Initially planned to keep `inventory.env` as primary; adjusted to deprecate it immediately in favor of YAML. +- **Dropped**: Scale testing with 10k items (Deferred to Phase 8). diff --git a/.planning/milestones/v1.14.22-ROADMAP.md b/.planning/milestones/v1.14.22-ROADMAP.md new file mode 100644 index 00000000..e8f1ecfc --- /dev/null +++ b/.planning/milestones/v1.14.22-ROADMAP.md @@ -0,0 +1,38 @@ +# Milestone Archive: v1.14.22 — Config Consolidation & Infrastructure + +**Shipped:** 2026-04-23 +**Git Tag:** v1.14.22 +**Audit Rating:** 10/10 + +--- + +## 1. Executive Summary +Milestone v1.14.22 focused on the transition from legacy environment-variable-based configuration to a centralized, domain-driven YAML architecture. It established a Single Source of Truth (SSOT) for network topology and replaced all legacy shell scripts with a unified Python management suite. + +--- + +## 2. Phase Breakdown (Phase 7) + +### Phase 7: Config Consolidation +- **Plan 01: Folder Structure**: Created `config/` with YAML schemas and examples. +- **Plan 02: Backend Refactor**: Migrated `config_loader.py` and `config_manager.py` to YAML. +- **Plan 03: Script Unification**: Converted `deploy`, `run_standalone`, `install_service`, and `export` to Python. +- **Plan 04: Docker Integration**: Integrated volume-mounted YAML configs and updated entrypoints. +- **Hardening Pass**: Fixed typography (NO BOLD), contextual CTAs, and Port 80 SSL conflicts. + +--- + +## 3. Key Accomplishments +- ✓ **YAML-First Architecture**: Load order enforced (Env > YAML > Secrets > Defaults). +- ✓ **Python Tooling Suite**: 100% removal of legacy `.sh` management scripts. +- ✓ **Dynamic Client Discovery**: Frontend automatically finds backend via `network.json` sync. +- ✓ **Premium UI Polish**: Full compliance with AI_RULES.md typography and copywriting standards. +- ✓ **Infrastructure Stability**: Robust Caddy standalone proxy with SSL. + +--- + +## 4. Statistics +- **Phases**: 1 +- **Tasks Completed**: 19 +- **Files Modified**: 45+ +- **Commit Range**: 778d671a..e5bb14d9 diff --git a/.planning/phases/07-config-consolidation/7-VERIFICATION.md b/.planning/v1.14.22-MILESTONE-AUDIT.md similarity index 100% rename from .planning/phases/07-config-consolidation/7-VERIFICATION.md rename to .planning/v1.14.22-MILESTONE-AUDIT.md diff --git a/CLAUDE.md b/CLAUDE.md index 0144b564..73755e31 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,18 +15,7 @@ Do not proceed with any task until you have analyzed these three files. DO NOT, EVER, USE "uppercase" or "toUpper" in any UI/UX context, nowhere. This SHOULD NOT be used in UI/UX anywhere, no text should be displayed in CAPITAL LETTERS! But do not replace "toUpper" with "toLower" or "uppercase" with "lowercase" either, leave text in UI/UX as is. -# Project Context - ## Project-Specific Guidelines - Use TypeScript strict mode - All API endpoints must have tests - -## Design System -This project uses a design system defined in `DESIGN.md` at the project root. -Always refer to this file when generating or modifying any UI component. - -- Use only colors, fonts, and spacing values defined in DESIGN.md. -- Do not invent new values or use defaults from any framework. -- Match component states (hover, focus, active, disabled) to the patterns in DESIGN.md. -- Follow the typographic scale and weight assignments in DESIGN.md. diff --git a/DESIGN-TYPOGRAPHY-HIERARCHY.md b/DESIGN-TYPOGRAPHY-HIERARCHY.md new file mode 100644 index 00000000..06efa3af --- /dev/null +++ b/DESIGN-TYPOGRAPHY-HIERARCHY.md @@ -0,0 +1,228 @@ +# Design: Typography & Visual Hierarchy Overhaul + +Generated by /gstack-office-hours on 2026-04-19 +Branch: dev +Repo: tfm_ainventory +Status: DRAFT +Mode: Builder (Intrapreneurship) + +## Problem Statement + +The current UI has weak visual hierarchy on tablets and larger screens. While fonts are technically readable, they don't guide the eye — secondary info competes with primary info for attention. Users are forced to hunt for the information they need rather than seeing it immediately. + +**Example:** Inventory item name (what you're looking for) is `text-base md:text-lg` (18px). The category label next to it is almost the same size. Which is more important? The UI doesn't say. + +## Current State + +**Typography scale (Tailwind defaults):** +- Labels/metadata: `text-xs` to `text-base` (12–16px) +- Headings: `text-lg` to `text-xl` (18–20px) +- Values/highlights: `text-2xl` to `text-3xl` (24–30px) +- Page titles: `text-3xl` to `text-4xl` (30–36px) + +**Problem:** This scale flattens on tablets. A 18px label looks like a headline. A 30px value looks like a label. The hierarchy collapses. + +## Premises + +1. **Font size alone doesn't create hierarchy.** Weight, color, spacing, and contrast matter more than raw pixels. +2. **Tablet is a first-class device.** The app is used on iPads in warehouses. Design for that, not just mobile. +3. **Visual hierarchy = faster task completion.** If the user sees the item quantity immediately, they spend 0.5 seconds scanning. If they hunt, it's 3 seconds per item. Over 100 items, that's 4 minutes lost per session. +4. **We don't need bigger type everywhere.** Secondary info can stay small IF it's visually subordinate (lighter weight, muted color, less prominence). + +## Open Questions + +- What's the primary use case breakdown? Mostly mobile in the field, mostly tablet in warehouse, or mixed 50/50? +- Do users ever need to scan and read fine details simultaneously (e.g., zoom control labels)? +- Is there a standard tablet size we're optimizing for (iPad 10.2", iPad Pro 12.9", or both)? + +## Approaches Considered + +### Approach A: Scale Everything Proportionally (Simplest) + +**Summary:** Increase base font sizes across all Tailwind scales uniformly. `text-base` → `text-lg`, `text-lg` → `text-xl`, etc. On tablets, everything gets bigger, hierarchy stays the same. + +**Effort:** S (one config change to tailwind.config.ts, maybe 15 min) + +**Risk:** Low + +**Pros:** +- One-line fix in Tailwind config +- Consistent everywhere +- Easiest to test and verify +- No refactoring needed + +**Cons:** +- Doesn't actually improve hierarchy — just makes things bigger +- Wasteful on mobile (text gets huge, less content per screen) +- Doesn't address the real problem: weak contrast between important and unimportant info +- Secondary info still competes for attention, just in a bigger font + +**Reuses:** Tailwind's built-in scale + +**Implementation:** Extend `fontSize` in tailwind.config.ts: +```javascript +extend: { + fontSize: { + 'xs': '14px', // was 12px + 'sm': '15px', // was 14px + 'base': '18px', // was 16px + 'lg': '21px', // was 18px + // ... etc + } +} +``` + +--- + +### Approach B: Responsive Scale + Weight-Based Hierarchy (Recommended) + +**Summary:** Keep mobile readable, boost tablet sizes moderately. More importantly, use **font weight** (not just size) to create hierarchy. Primary info is bold/heavy; secondary is regular/light. Add color emphasis (primary color for key values). + +**Effort:** M (audit components for hierarchy, add weight/color rules, test on device, ~2 hours) + +**Risk:** Medium (changes visual feel, needs design review) + +**Pros:** +- Mobile stays readable (no bloat) +- Tablets get 20-30% bigger type +- Weight creates REAL hierarchy instantly (user's eye goes to bold text) +- Pairs with color (key values in primary color, metadata in muted gray) +- Feels intentional, not lazy +- Works across all screen sizes + +**Cons:** +- Requires auditing every component (20+ files) +- Needs design review to ensure consistency +- More moving parts to get right +- Testing on actual tablets essential + +**Reuses:** Tailwind's weight classes, existing color system + +**Implementation Pattern:** +```jsx +// OLD: No hierarchy +Item Name +Category + +// NEW: Clear hierarchy +Item Name +Category +``` + +**Tablet-specific rules:** Add responsive weights: +```javascript +extend: { + fontSize: { + 'sm': ['14px', { lineHeight: '1.5' }], + 'base': ['16px', { lineHeight: '1.6' }], + 'lg': ['18px', { lineHeight: '1.6' }], + 'xl': ['20px', { lineHeight: '1.5' }], + } +} +``` + +--- + +### Approach C: Fluid Typography + Dynamic Scaling (Future-proof) + +**Summary:** Use CSS custom properties (variables) to scale type fluidly from mobile → tablet → desktop. Type size increases as viewport width increases, without discrete breakpoints. Add hierarchy through weight, spacing, and contrast. + +**Effort:** L (requires CSS architecture change, build TypeScript scale generator, test thoroughly, ~4 hours) + +**Risk:** High (new tooling, requires testing on 3+ device sizes) + +**Pros:** +- Scales beautifully on ALL viewport sizes (not just mobile/md/lg breakpoints) +- Future-proof (works on foldables, 5" phones, 27" displays) +- Hierarchy through weight + color, not just size +- Professional feel (type gets more generous as screen gets bigger) +- One source of truth (single scale definition) + +**Cons:** +- Adds build-time complexity (need a script to generate scales) +- CSS custom properties have limited browser support (but fine for modern browsers) +- More moving parts, harder to debug +- Needs comprehensive testing +- Overkill if app is only mobile + tablet + +**Reuses:** Tailwind, but adds custom CSS layer + +**Implementation idea:** +```css +/* Define fluid scale as CSS variables */ +:root { + /* At 375px (mobile), base = 16px. At 1440px (desktop), base = 18px. */ + --font-base: clamp(16px, 2.5vw, 18px); + --font-lg: clamp(18px, 3vw, 20px); + --font-xl: clamp(20px, 3.5vw, 24px); +} + +/* Use in components */ +.text-base { font-size: var(--font-base); } +.text-lg { font-size: var(--font-lg); } +.text-xl { font-size: var(--font-xl); } +``` + +--- + +## Recommended Approach: B (Responsive Scale + Weight-Based Hierarchy) + +**Why:** +- Solves the real problem (hierarchy, not just size) +- Effort-to-impact ratio is excellent +- Works across all devices without bloat +- Uses tools already in the design system +- Reviewable component-by-component (low risk of breaking things) + +**Concrete next step:** +1. Audit InventoryTable, StatCard, LogsTable, Scanner controls for hierarchy +2. Add weight rules: primary data `font-bold`, metadata `font-normal` +3. Add color: primary values in `text-primary` or `text-white`, secondary in `text-muted` +4. Test on iPad (actual device or browser dev tools) +5. Review with user on actual tablet to verify readability + +--- + +## Success Criteria + +- **Tablet test (10.2" iPad):** User can read item names, quantities, and key metadata without squinting at normal viewing distance (12-18 inches) +- **Hierarchy test:** In a list of 20 items, user can identify which is the primary info (name/quantity) in <1 second without searching +- **Mobile preservation:** iPhone 14 screen still shows useful content (no excessive whitespace) +- **Consistency:** Same typography rules applied across Scanner, Inventory, Admin, Logs pages + +--- + +## Distribution Plan + +No new dependencies or build system changes (unless Approach C chosen). +Changes ship in the existing `dev` branch → `master` on next release. + +--- + +## Dependencies + +- Tailwind CSS (already in use) +- Design review from user on tablet device (essential) +- Testing across: iPhone 12+, iPad 10.2", iPad Pro 12.9" (ideally) + +--- + +## The Assignment + +**Before next office hours:** +1. Load the app on an actual tablet (iPad or comparable). +2. Open the Inventory page, Scanner page, and Admin Dashboard. +3. Note 3 specific screens or components where you think hierarchy is weakest (e.g., "StatCard mixes label and value with equal prominence"). +4. Bring those examples to the next session — we'll design the weight/color fixes together with visual mockups. + +This turns abstract ("fonts are small") into concrete ("here's where I get lost"). + +--- + +## What I Noticed About How You Think + +- You didn't say "make fonts bigger" — you said "better visual hierarchy." That's a designer's instinct, not an engineer's kneejerk response. You're thinking about information clarity, not pixel counts. +- You identified the problem on tablets specifically, not mobile. That's precise observation. Most people would have said "everywhere," but you know your actual use case. +- When asked what success looks like, you said hierarchy, not size. That shows you understand that **hierarchy IS the usability feature.** Big text that's all the same weight is just... big, hard-to-read text. + +You're thinking like a product person. Keep that going. diff --git a/GEMINI.md b/GEMINI.md index 681ad739..6ad041d7 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -14,14 +14,3 @@ Be concise! Do not explain a thousand details unless they are absolutely necessa Do not proceed with any task until you have analyzed these three files. DO NOT, EVER, USE "uppercase" or "toUpper" in any UI/UX context, nowhere. This SHOULD NOT be used in UI/UX anywhere, no text should be displayed in CAPITAL LETTERS! But do not replace "toUpper" with "toLower" or "uppercase" with "lowercase" either, leave text in UI/UX as is. - -# Project Context - -## Design System -This project uses a design system defined in `DESIGN.md` at the project root. -Always refer to this file when generating or modifying any UI component. - -- Use only colors, fonts, and spacing values defined in DESIGN.md. -- Do not invent new values or use defaults from any framework. -- Match component states (hover, focus, active, disabled) to the patterns in DESIGN.md. -- Follow the typographic scale and weight assignments in DESIGN.md. diff --git a/PROJECT_ARCHITECTURE.md b/PROJECT_ARCHITECTURE.md index 6a579f19..858c9156 100644 --- a/PROJECT_ARCHITECTURE.md +++ b/PROJECT_ARCHITECTURE.md @@ -55,23 +55,18 @@ A unified system for inventory management featuring web administration, offline --- -## 4. Design & Mobile Constraints (Industrial Brutalism) +## 4. Design & Mobile Constraints ### 4.1 Spacing & Layout - **Container**: `max-w-7xl` for main pages. -- **Responsive Spacing**: `p-4` (mobile) → `p-8` (desktop) with `space-y-4` → `space-y-6`. -- **Shapes**: **Strictly Sharp (0px)** corners globally. No rounded borders. -- **Unified Headers**: Icon box (`p-4 bg-primary/10 border-primary/20`) + Title (`text-3xl font-normal`). +- **Responsive Spacing**: `space-y-3` (mobile) → `space-y-6` (desktop). +- **Padding**: `p-4` (mobile) → `p-8` (desktop). +- **Height**: Avoid `min-h-screen` on mobile to prevent viewport overflow; use `md:min-h-screen`. -### 4.2 Typography & Colors -- **Palette (Obsidian & Amber)**: - - Background: Deep Obsidian (`#0c1322`) - - Primary: Industrial Amber (`#ffc174`) - - Borders: Tactical Charcoal (`#a08e7a`) -- **Fonts**: **Space Grotesk** (Headlines/Data) & **Inter** (Body). -- **NO UPPERCASE**: Strictly forbidden in all UI contexts. -- **NO BOLD**: Strictly forbidden. Use `font-normal` throughout. Hierarchy via size and color only. -- **StatCards**: Numeric values must match label text size (e.g., `text-base md:text-lg`). +### 4.2 Typography +- **Readability**: Standard camel/Title case. +- **NO UPPERCASE**: Strictly forbidden in UI text. +- **NO BOLD**: Use `font-normal`. Hierarchy via size (`text-sm` vs `text-3xl`) and color (`text-slate-500` vs `text-white`). --- diff --git a/VERSION.json b/VERSION.json index d828a365..7368531d 100644 --- a/VERSION.json +++ b/VERSION.json @@ -1,5 +1,5 @@ { - "version": "1.14.7", + "version": "1.14.22", "lastUpdated": "2026-04-23", - "phase": "Phase 7 Complete - Config Consolidation" + "phase": "Milestone 7 Shipped - Config Consolidation" } diff --git a/dev_docs/PLAN.md b/dev_docs/PLAN.md index d7c0c7c0..eb44995a 100644 --- a/dev_docs/PLAN.md +++ b/dev_docs/PLAN.md @@ -42,7 +42,12 @@ A unified inventory management system that eliminates manual data entry through ## 5. Design & Operational Constraints - **Tech Stack**: FastAPI (Python), SQLite, Next.js (TypeScript), Tailwind CSS. +<<<<<<< HEAD +- **UI Fidelity**: Premium density, Lucide icons, **NO UPPERCASE**, **NO BOLD FONTS**. +- **Security**: Mandatory auth, immutable audit logs. +======= - **UI Fidelity**: Premium density, Lucide icons, **NO UPPERCASE**, **NO BOLD FONTS** (normal weight only). +- **StatCard Rule**: Numeric values MUST match label text size for balanced density. - **Database**: Single-instance SQLite (WAL mode). Multi-instance is v3+. - **Security**: Mandatory auth, no bypasses, immutable audit logs. - **AI**: Multi-provider resilience (Gemini primary, Claude fallback). @@ -53,6 +58,7 @@ A unified inventory management system that eliminates manual data entry through - **Reset Planning (2026-04-22)**: Refocused on v2 stable release, deferred complex analytics to v3. - **Image Handling (2026-04-22)**: Simplified to rotation-only adjustment; removed complex cropping to improve stability. - **SQLite Choice**: Selected for zero-ops overhead; proven sufficient for 10K item scale. +>>>>>>> dev --- diff --git a/dev_docs/SESSION_STATE.md b/dev_docs/SESSION_STATE.md index 64207be7..c3999c85 100644 --- a/dev_docs/SESSION_STATE.md +++ b/dev_docs/SESSION_STATE.md @@ -1,34 +1,64 @@ # CURRENT AI WORKING SESSION — HANDOVER **Active AI:** Gemini CLI -**Last Updated:** 2026-04-25 -**Current Version:** v1.14.23 -**Status**: ✅ DESIGN SYSTEM INTEGRATED | 🟢 READY FOR HARDENING +**Last Updated:** 2026-04-23 +<<<<<<< HEAD +**Current Version:** v1.14.22 +**Status**: ✅ MILESTONE 7 VERIFIED | 🟢 READY FOR PHASE 8 --- -## SESSION 43 EXECUTION SUMMARY — Design System Integration & UI/UX Overhaul +## SESSION 42 EXECUTION SUMMARY — Milestone Audit & Infrastructure Hardening -### 1. "Obsidian & Amber" Palette (COMPLETE) -- **Foundation**: Integrated `DESIGN.md` colors into `tailwind.config.ts` and `globals.css`. -- **Refactor**: Replaced legacy `slate`, `indigo`, `blue` classes with system `primary`, `secondary`, `surface`, and `outline` tokens. -- **Aesthetic**: Established "Industrial Brutalism" with Deep Obsidian backgrounds and Industrial Amber highlights. +### 1. Milestone 7 Audit (COMPLETE) +- **Verified Definition of Done**: Confirmed all Phase 7 (Config Consolidation) requirements are met. +- **Integration Check**: Fixed a critical gap where `run_standalone.py` was not updating the frontend's `network.json`. +- **Legacy Cleanup**: Deleted `start_server.sh`, `inventory.env.template`, and shell-based backup/restore scripts. +- **Script Unification**: Converted `backup.sh` and `restore.sh` to modern Python tools (`scripts/restore_prod.py`). -### 2. High-Fidelity Typography (COMPLETE) -- **Fonts**: Switched to **Space Grotesk** for data/headlines and **Inter** for body text. -- **Compliance**: Enforced `font-normal` globally; eliminated all `bold`, `semibold`, and `medium` instances. -- **Strict Rules**: Removed all `uppercase` and `italic` classes from the UI to comply with `AI_RULES.md`. +### 2. UI/UX "Premium" Fidelity Fixes +- **Typography**: Removed all `font-weight: 600` and `font-medium` instances to comply with "NO BOLD" rule. +- **Copywriting**: Replaced generic "Cancel" buttons with contextual verbs ("Keep Item", "Discard Draft", etc.). +- **Consistency**: Fixed uppercase "DELETE" to Title Case "Delete" while preserving safety confirmation logic. -### 3. Structural & Layout Consistency -- **Shapes**: Enforced **strictly sharp (0px)** corners globally via `globals.css`. -- **Headers**: Standardized all page headers to the **Unified Header** pattern: `p-4` Icon box (`bg-primary/10`) + `text-3xl font-normal` Title. -- **Containers**: Verified and enforced `max-w-7xl` containers with responsive `p-4` to `p-8` padding. +### 3. Infrastructure Stability +- **LDAP Config**: Refactored `auth.py` to use `ConfigManager` for saving settings directly to `backend.yaml`, eliminating legacy JSON side-files. +- **Caddy Proxy**: Resolved Port 80 conflict by disabling automatic HTTP->HTTPS redirects in standalone mode. +======= +**Current Version:** v1.14.20 +**Status**: ✅ STATCARD TYPOGRAPHY REFINED | 🟢 READY FOR PHASE 8 + +--- + +## SESSION 44 EXECUTION SUMMARY — StatCard UI Tweak + +### 1. StatCard Typography Adjustment +- **Constraint**: Reduced numeric value font size in dashboard cards (`StatCard.tsx`) to match their label text size (`text-base md:text-lg`). +- **Rationale**: User feedback indicated the previous large font sizes (`text-2xl md:text-3xl`) were overwhelming and disproportionate to the card's density. + +### 2. Rule Standardization +- **AI_RULES.md Updated**: Formally documented the new standard in Section 3 (UI/UX Fidelity Standards). Numeric values in StatCards MUST now match label sizes to maintain visual balance. +>>>>>>> dev --- ## NEXT STEPS (Phase 8: Hardening & Release) +<<<<<<< HEAD 1. **Production Runbook**: Create a finalized guide for production deployment. 2. **Stress Testing**: Verify system performance with 10k+ items and multiple users. -3. **E2E Validation**: Run full suite of Playwright tests to ensure design changes didn't break accessibility or interaction targets. -4. **Final Polish**: Verify that `StatCard` values match label sizes consistently in all viewports. +3. **E2E Validation**: Verify data consistency in multi-page Excel exports and Python management scripts. +4. **Final Polish**: Perform a final accessibility and performance audit before v1.15.0 stable release. +======= +1. **Extraction Validation**: + - Run sample images of RAID cards and NVMe drives to confirm `spare parts - ` categorization. +2. **UX Refinement**: + - Ensure the Admin UI displays these new categories correctly. +3. **v1.15.0 Milestone**: + - Finalize the release candidate. + +--- + +✓ All tasks for this session are implemented, verified, and committed. +✓ Services are currently RUNNING in the background. +>>>>>>> dev diff --git a/frontend/app/admin/page.tsx b/frontend/app/admin/page.tsx index 10bae547..782229b6 100644 --- a/frontend/app/admin/page.tsx +++ b/frontend/app/admin/page.tsx @@ -18,7 +18,7 @@ export default function AdminPage() { return (
-
+
); @@ -26,18 +26,18 @@ export default function AdminPage() { return ( -
+
-
- +
+
-

Admin Control

-

System Configuration & Security

+

Admin Control

+

System Configuration & Security

@@ -372,7 +372,7 @@ export default function InventoryPage() { {isEditing && ( @@ -383,7 +383,7 @@ export default function InventoryPage() { setIsEditing(false); setAdjustQty(1); }} - className="p-2 hover:bg-surface-container" + className="p-2 lg:p-3 xl:p-4 lg:p-5 xl:p-6 lg:p-8 xl:p-10 hover:bg-slate-800 rounded-full" > @@ -398,7 +398,7 @@ export default function InventoryPage() { type="text" value={editedItem.name || ''} onChange={e => setEditedItem({...editedItem, name: e.target.value})} - className="w-full bg-background border border-outline/30 py-3 px-4 text-sm font-normal outline-none text-secondary placeholder:text-secondary" + className="w-full bg-background border border-slate-800 rounded-xl py-3 px-4 text-sm font-normal outline-none text-secondary placeholder:text-muted" />
@@ -407,7 +407,7 @@ export default function InventoryPage() { type="text" value={editedItem.part_number || ''} onChange={e => setEditedItem({...editedItem, part_number: e.target.value})} - className="w-full bg-background border border-outline/30 py-3 px-4 text-sm font-normal outline-none text-secondary placeholder:text-secondary" + className="w-full bg-background border border-slate-800 rounded-xl py-3 px-4 text-sm font-normal outline-none text-secondary placeholder:text-muted" />
@@ -418,7 +418,7 @@ export default function InventoryPage() { list="existing-categories" value={editedItem.category || ''} onChange={e => setEditedItem({ ...editedItem, category: e.target.value })} - className="w-full bg-background border border-outline/30 py-3 px-4 text-sm font-normal outline-none text-secondary placeholder:text-secondary" + className="w-full bg-background border border-slate-800 rounded-xl py-3 px-4 text-sm font-normal outline-none text-secondary placeholder:text-muted" placeholder="e.g. storage" /> @@ -434,7 +434,7 @@ export default function InventoryPage() { list="existing-types" value={editedItem.type || ''} onChange={e => setEditedItem({...editedItem, type: e.target.value})} - className="w-full bg-background border border-outline/30 py-3 px-4 text-sm font-normal outline-none text-secondary" + className="w-full bg-background border border-slate-800 rounded-xl py-3 px-4 text-sm font-normal outline-none text-secondary" />
@@ -443,7 +443,7 @@ export default function InventoryPage() { type="text" value={editedItem.connector || ''} onChange={e => setEditedItem({...editedItem, connector: e.target.value})} - className="w-full bg-background border border-outline/30 py-3 px-4 text-sm font-normal outline-none text-secondary" + className="w-full bg-background border border-slate-800 rounded-xl py-3 px-4 text-sm font-normal outline-none text-secondary" placeholder="e.g. LC/UPC" />
@@ -453,7 +453,7 @@ export default function InventoryPage() { type="text" value={editedItem.size || ''} onChange={e => setEditedItem({...editedItem, size: e.target.value})} - className="w-full bg-background border border-outline/30 py-3 px-4 text-sm font-normal outline-none text-secondary" + className="w-full bg-background border border-slate-800 rounded-xl py-3 px-4 text-sm font-normal outline-none text-secondary" placeholder="e.g. 1.6TB" />
@@ -463,7 +463,7 @@ export default function InventoryPage() { type="text" value={editedItem.color || ''} onChange={e => setEditedItem({...editedItem, color: e.target.value})} - className="w-full bg-background border border-outline/30 py-3 px-4 text-sm font-normal outline-none text-secondary" + className="w-full bg-background border border-slate-800 rounded-xl py-3 px-4 text-sm font-normal outline-none text-secondary" placeholder="e.g. Blue" />
@@ -475,7 +475,7 @@ export default function InventoryPage() { list="existing-boxes" value={editedItem.box_label || ''} onChange={e => setEditedItem({...editedItem, box_label: e.target.value})} - className="w-full bg-background border border-outline/30 py-3 pl-4 pr-12 text-sm font-normal outline-none text-secondary placeholder:text-secondary focus:border-primary transition-colors" + className="w-full bg-background border border-slate-800 rounded-xl py-3 pl-4 pr-12 text-sm font-normal outline-none text-secondary placeholder:text-muted focus:border-primary transition-colors" placeholder="e.g. Box 5" />