Files
Prism_old/UI_LAYOUT_DESIGN.txt
2025-12-15 14:54:29 -06:00

1188 lines
34 KiB
Plaintext

================================================================================
JOB-PAGES APPLICATION - UI LAYOUT AND DESIGN DOCUMENTATION
Liquid Glass Design System
================================================================================
This document describes the complete layout, design, and visual structure of the
Job-Pages application with the Apple-inspired liquid glass (glassmorphism) design.
Last Updated: 2024
Version: 2.0
================================================================================
TECHNOLOGY STACK
================================================================================
- Frontend Framework: Vanilla HTML/CSS/JavaScript
- CSS Framework: Tailwind CSS (via CDN)
- Rich Text Editor: Quill.js (for notes editing)
- Authentication: PocketBase
- Design System: Liquid Glass (Glassmorphism) with gradient backgrounds
- User Preferences: Stored in PocketBase users collection PRISM JSON column
================================================================================
OVERALL DESIGN THEME
================================================================================
DESIGN PHILOSOPHY:
- Apple-inspired liquid glass aesthetic
- Glassmorphism with backdrop blur effects
- Semi-transparent elements with frosted glass appearance
- Smooth transitions and hover effects
- Premium, modern, clean interface
COLOR SCHEME:
- Primary: Indigo (#4F46E5 / indigo-600)
- Gradient Avatar: Indigo → Purple → Pink
- Background: Gradient from-gray-50 via-blue-50/30 to-indigo-50/40
- Text: Dark gray (#1F2937 / gray-900) for headings, medium gray (#4B5563 / gray-600) for body
- Error: Red (#DC2626 / red-600)
- Success: Green (#059669 / green-600)
- Borders: White with opacity (white/20 to white/40)
TYPOGRAPHY:
- Headings: Bold, large (text-xl to text-3xl)
- Body: Medium weight, readable sizes (text-sm to text-base)
- Labels: Medium weight, small to medium (text-sm to text-base)
- Font weights: font-medium, font-semibold, font-bold
SPACING:
- Consistent padding: p-4, p-6, p-8
- Consistent margins: mb-4, mb-6, mb-8
- Gap spacing: gap-4, gap-6
- Navigation padding: py-4 sm:py-4 (consistent on all screen sizes)
BORDER RADIUS:
- Standard: rounded-xl (12px) - buttons, inputs
- Large: rounded-2xl (16px) - cards, containers
- Extra Large: rounded-3xl (24px) - modals
- Full: rounded-full - avatars
SHADOWS:
- Small: shadow-sm - subtle elevation
- Large: shadow-lg - buttons, containers
- Extra Large: shadow-xl - cards
- 2X Large: shadow-2xl - modals, dropdowns
- Colored: shadow-indigo-500/30, shadow-indigo-500/50 - avatars
BLUR EFFECTS:
- Small: backdrop-blur-sm (4px) - inputs, buttons, table headers
- Standard: backdrop-blur-xl (24px) - cards, navigation, dropdowns
- Strong: backdrop-blur-2xl (40px) - modals, overlays
RESPONSIVE DESIGN:
- Mobile-first approach
- Breakpoints: sm (640px), md (768px), lg (1024px)
- Flexible layouts with grid and flexbox
- Full-width on mobile, constrained max-width on desktop (max-w-7xl)
- Sticky navigation on all screen sizes
================================================================================
NAVIGATION BAR / MENU BAR (All Pages)
================================================================================
OVERVIEW
--------
The navigation bar is consistent across all pages (except login) and uses
liquid glass design with glassmorphism effects. It includes user avatar,
dropdown menu, and optional back navigation links.
STRUCTURE
---------
- Container: <nav> element
- Position: Sticky at top of page
- Z-index: z-40 (below modals which use z-50)
NAVIGATION BAR CONTAINER
------------------------
Classes:
- backdrop-blur-xl
- bg-white/70
- border-b border-white/20
- shadow-sm
- sticky top-0 z-40
Purpose: Creates frosted glass navigation that stays at top while scrolling
Example:
<nav class="backdrop-blur-xl bg-white/70 border-b border-white/20 shadow-sm sticky top-0 z-40">
INNER CONTAINER
---------------
Classes:
- max-w-7xl mx-auto
- px-4 sm:px-6 lg:px-8
FLEX CONTAINER
--------------
Classes:
- flex flex-col sm:flex-row
- justify-between
- items-center
- h-16 sm:h-auto
- py-4 sm:py-4
- gap-4 sm:gap-0
- px-2
Layout:
- Mobile: Vertical stack (flex-col)
- Desktop: Horizontal (flex-row)
- Consistent padding on all screen sizes (py-4 sm:py-4)
LEFT SIDE (Optional - Back Link)
---------------------------------
Classes:
- flex items-center gap-4
- w-full sm:w-auto
Back Link (when present):
- Color: text-indigo-600
- Hover: hover:text-indigo-700
- Weight: font-medium
- Size: text-sm sm:text-base
- Transition: transition-colors
- Text: "← Dashboard" or "← [Page Name]"
Example:
<div class="flex items-center gap-4 w-full sm:w-auto">
<a href="dashboard.html" class="text-indigo-600 hover:text-indigo-700
font-medium text-sm sm:text-base transition-colors">← Dashboard</a>
</div>
RIGHT SIDE (User Avatar & Dropdown)
------------------------------------
Classes:
- flex flex-col sm:flex-row
- items-center gap-3
- w-full sm:w-auto
- relative
- justify-end sm:justify-start
Purpose: Contains user avatar button and dropdown menu
- On mobile: Stays right-aligned (justify-end)
- On desktop: Normal flow (justify-start)
USER AVATAR BUTTON
------------------
Container:
- relative (for dropdown positioning)
Button:
- Size: w-10 h-10
- Shape: rounded-full
- Gradient: bg-gradient-to-br from-indigo-500 via-purple-500 to-pink-500
- Display: flex items-center justify-center
- Text: text-white
- Font: font-medium text-sm
- Shadow: shadow-lg shadow-indigo-500/30
- Hover: hover:scale-105 hover:shadow-indigo-500/50
- Transition: transition-all duration-300
- Focus: focus:outline-none
Initials:
- Size: text-xs
- Weight: font-semibold
- Color: text-white
Example:
<div class="relative">
<button class="w-10 h-10 rounded-full bg-gradient-to-br from-indigo-500
via-purple-500 to-pink-500 flex items-center justify-center
text-white font-medium text-sm hover:scale-105 focus:outline-none
transition-all duration-300 shadow-lg shadow-indigo-500/30
hover:shadow-indigo-500/50">
<span class="text-xs font-semibold">IC</span>
</button>
</div>
USER DROPDOWN MENU
------------------
Container:
- Position: absolute right-0 mt-2
- Width: w-48
- Background: backdrop-blur-xl bg-white/80
- Border radius: rounded-2xl
- Shadow: shadow-2xl
- Border: border border-white/30
- Padding: py-2
- Z-index: z-50
- Overflow: overflow-hidden
- Hidden by default: hidden class
Example:
<div class="hidden absolute right-0 mt-2 w-48 backdrop-blur-xl bg-white/80
rounded-2xl shadow-2xl border border-white/30 py-2 z-50 overflow-hidden">
DROPDOWN HEADER
---------------
Classes:
- px-4 py-3
- border-b border-white/20
Content:
- Label: "Signed in as"
* Size: text-xs
* Color: text-gray-500
* Weight: font-medium
- Email: User email address
* Size: text-sm
* Weight: font-semibold
* Color: text-gray-900
* Truncate: truncate
* Margin top: mt-0.5
Example:
<div class="px-4 py-3 border-b border-white/20">
<p class="text-xs text-gray-500 font-medium">Signed in as</p>
<p class="text-sm font-semibold text-gray-900 truncate mt-0.5">user@example.com</p>
</div>
DROPDOWN ITEMS
--------------
Standard Item (Preferences link):
- Display: block
- Padding: px-4 py-2.5
- Text: text-sm text-gray-700
- Hover: hover:bg-white/40
- Transition: transition-colors
- Weight: font-medium
- Focus: focus:outline-none
Example:
<a href="preferences.html" class="block px-4 py-2.5 text-sm text-gray-700
hover:bg-white/40 focus:outline-none transition-colors font-medium">
Preferences
</a>
Destructive Item (Logout):
- Width: w-full
- Alignment: text-left
- Padding: px-4 py-2.5
- Text: text-sm text-red-600
- Hover: hover:bg-red-50/50
- Transition: transition-colors
- Weight: font-medium
- Focus: focus:outline-none
Example:
<button class="w-full text-left px-4 py-2.5 text-sm text-red-600
hover:bg-red-50/50 focus:outline-none transition-colors font-medium">
Logout
</button>
DROPDOWN FUNCTIONALITY
----------------------
- Toggle: Click avatar button to show/hide dropdown
- Close on outside click: JavaScript event listener
- Close on item click: Automatic (navigation or logout)
RESPONSIVE BEHAVIOR
-------------------
Mobile (< 640px):
- Navigation stacks vertically
- Avatar stays right-aligned (justify-end)
- Full-width elements where needed
Desktop (≥ 640px):
- Navigation horizontal layout
- Avatar in normal flow
- Optimal spacing
PAGES WITH NAVIGATION
---------------------
✓ Dashboard (dashboard.html)
- No back link
- Avatar and dropdown only
✓ Jobs Page (jobs.html)
- Back link: "← Dashboard"
- Avatar and dropdown
✓ Notes Page (notes.html)
- Back link: "← Dashboard"
- Avatar and dropdown
✓ Preferences Page (preferences.html)
- Back link: "← Dashboard"
- Avatar and dropdown
✗ Login Page (index.html)
- No navigation bar (separate design)
================================================================================
PAGE 1: LOGIN PAGE (index.html)
================================================================================
LAYOUT STRUCTURE:
- Full-screen centered layout
- Single centered card on gradient background
BACKGROUND:
- Gradient: from-blue-50 to-indigo-100
- Full viewport height: min-h-screen
- Centered content with flexbox: flex items-center justify-center
- Padding: p-4
MAIN CARD:
- Container: max-w-md, full width on mobile
- Background: bg-white (solid, not glassmorphism for login)
- Border radius: rounded-lg
- Shadow: shadow-xl
- Padding: p-8
- Centered content
CARD HEADER:
- Text alignment: text-center
- Margin bottom: mb-8
- Title: "Job Tracking"
* Size: text-3xl
* Weight: font-bold
* Color: text-gray-800
* Margin bottom: mb-2
- Subtitle: "Sign in to your account"
* Color: text-gray-600
FORM ELEMENTS:
- Form container: space-y-6 (vertical spacing between elements)
ERROR MESSAGE (Hidden by default):
- Container: hidden (shown on error)
- Background: bg-red-50
- Border: border border-red-200
- Text color: text-red-700
- Padding: px-4 py-3
- Border radius: rounded-lg
- Font size: text-sm
INPUT FIELDS:
- Container: Full width with label above
- Label:
* Display: block
* Font: text-sm font-medium
* Color: text-gray-700
* Margin bottom: mb-2
- Input:
* Width: w-full
* Padding: px-4 py-3
* Border: border border-gray-300
* Border radius: rounded-lg
* Focus: focus:ring-2 focus:ring-indigo-500 focus:border-transparent
* Outline: outline-none
* Transition: transition
* Font size: text-base
* Placeholder: Light gray text
SUBMIT BUTTON:
- Width: w-full
- Background: bg-indigo-600
- Text color: text-white
- Padding: py-3 px-4
- Border radius: rounded-lg
- Font: font-medium
- Hover: hover:bg-indigo-700
- Focus: focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2
- Disabled: disabled:opacity-50 disabled:cursor-not-allowed
- Transition: transition
================================================================================
PAGE 2: DASHBOARD (dashboard.html)
================================================================================
LAYOUT STRUCTURE:
- Full-width layout with navigation header
- Constrained content area (max-w-7xl)
- Multiple sections: header, cards, stats, quick actions
BACKGROUND:
- Gradient: bg-gradient-to-br from-gray-50 via-blue-50/30 to-indigo-50/40
- Full height: min-h-screen
NAVIGATION HEADER:
- Background: backdrop-blur-xl bg-white/70
- Shadow: shadow-sm
- Border bottom: border-b border-white/20
- Position: sticky top-0 z-40
- Container: max-w-7xl mx-auto
- Padding: px-4 sm:px-6 lg:px-8
- Height: h-16 on desktop, auto on mobile
- Layout: Flexbox, space-between on desktop, column on mobile
- Responsive: flex-col sm:flex-row
- Inner padding: py-4 sm:py-4 gap-4 sm:gap-0 px-2
NAVIGATION CONTENT:
- Right side (avatar and dropdown):
* User avatar button:
- Size: w-10 h-10
- Gradient: bg-gradient-to-br from-indigo-500 via-purple-500 to-pink-500
- Shadow: shadow-lg shadow-indigo-500/30
- Hover: hover:scale-105 hover:shadow-indigo-500/50
- Transition: transition-all duration-300
- Rounded: rounded-full
* User dropdown:
- Background: backdrop-blur-xl bg-white/80
- Border: border border-white/30
- Shadow: shadow-2xl
- Rounded: rounded-2xl
- Padding: py-2
- Overflow: overflow-hidden
- Width: w-48
- Z-index: z-50
* Dropdown items:
- Header: px-4 py-3 border-b border-white/20
- Items: px-4 py-2.5 text-sm
- Hover: hover:bg-white/40
- Destructive (logout): text-red-600 hover:bg-red-50/50
MAIN CONTENT AREA:
- Container: max-w-7xl mx-auto
- Padding: px-4 sm:px-6 lg:px-8 py-8
PAGE HEADER:
- Title: "Welcome, [User Name]"
* Size: text-xl sm:text-2xl
* Weight: font-bold
* Color: text-gray-800
* Margin bottom: mb-2
- Subtitle: "Manage your job records and tracking"
* Size: text-sm sm:text-base
* Color: text-gray-600
DASHBOARD CARDS SECTION:
- Grid layout: grid-cols-1 md:grid-cols-2
- Gap: gap-6
- Margin bottom: mb-8
DASHBOARD CARD:
- Background: backdrop-blur-xl bg-white/60
- Border radius: rounded-2xl
- Shadow: shadow-xl
- Border: border border-white/30
- Padding: p-6
- Hover: hover:bg-white/70 transition-all duration-300
CARD STRUCTURE:
- Icon container:
* Size: w-12 h-12
* Background: bg-indigo-100
* Border radius: rounded-lg
* Centered: flex items-center justify-center
* Icon: SVG, w-6 h-6, color: text-indigo-600
- Title: "Job Tracking" or "Employee Reports"
* Size: text-lg
* Weight: font-semibold
* Color: text-gray-800
- Description: "View and manage job information"
* Size: text-sm
* Color: text-gray-600
* Margin: mb-4
- Link: "View Jobs →" or "View Reports →"
* Color: text-indigo-600
* Hover: hover:text-indigo-700
* Weight: font-medium
* Size: text-sm
QUICK STATS SECTION:
- Background: backdrop-blur-xl bg-white/60
- Border radius: rounded-2xl
- Shadow: shadow-xl
- Border: border border-white/30
- Padding: p-4 sm:p-6
- Margin bottom: mb-6 sm:mb-8
- Title: "Quick Stats"
* Size: text-base sm:text-lg
* Weight: font-semibold
* Color: text-gray-800
* Margin bottom: mb-4
STATS GRID:
- Grid: grid-cols-1 sm:grid-cols-3
- Gap: gap-4
STAT CARD:
- Layout: text-center
- Padding: p-4 sm:p-6
- Background: bg-indigo-50 (or green-50, purple-50)
- Border radius: rounded-lg
- Border: border border-indigo-100 (or green-100, purple-100)
- Hover: hover:shadow-md
- Transition: transition-shadow
- Number:
* Size: text-3xl sm:text-4xl
* Weight: font-bold
* Color: text-indigo-600 (or green-600, purple-600)
* Margin bottom: mb-2
* Loading state: animate-pulse with "..." placeholder
- Label:
* Size: text-xs sm:text-sm
* Weight: font-medium
* Color: text-gray-700
QUICK ACTIONS SECTION:
- Background: backdrop-blur-xl bg-white/60
- Border radius: rounded-2xl
- Shadow: shadow-xl
- Border: border border-white/30
- Padding: p-4 sm:p-6
- Title: "Quick Actions"
* Size: text-base sm:text-lg
* Weight: font-semibold
* Color: text-gray-800
* Margin bottom: mb-4
QUICK ACTIONS GRID:
- Grid: grid-cols-1 md:grid-cols-2
- Gap: gap-4
QUICK ACTION ITEM:
- Layout: flex items-center
- Padding: p-4
- Border: border border-gray-200
- Border radius: rounded-lg
- Hover: hover:bg-gray-50 hover:border-indigo-300 (or green-300 for reports)
- Transition: transition-colors
- Icon container:
* Size: w-10 h-10
* Background: bg-indigo-100 (or green-100 for reports)
* Border radius: rounded-lg
* Centered: flex items-center justify-center
* Margin right: mr-4
* Flex shrink: flex-shrink-0
* Icon: SVG, w-5 h-5, color: text-indigo-600 (or green-600)
- Text container:
* Min width: min-w-0
* Title:
- Weight: font-medium
- Color: text-gray-900
- Size: text-sm sm:text-base
* Description:
- Size: text-xs sm:text-sm
- Color: text-gray-500
================================================================================
PAGE 3: JOBS PAGE (jobs.html)
================================================================================
LAYOUT STRUCTURE:
- Same navigation header as dashboard
- Main content area with search, filters, view toggle, table/cards, and modal
NAVIGATION HEADER:
- Same as dashboard with addition:
* Back link: "← Dashboard"
- Color: text-indigo-600
- Hover: hover:text-indigo-700
- Weight: font-medium
- Size: text-sm sm:text-base
- Transition: transition-colors
- Positioned before title
MAIN CONTENT AREA:
- Container: max-w-7xl mx-auto
- Padding: px-4 sm:px-6 lg:px-8 py-8
MESSAGE CONTAINER:
- Container for success/error messages
- Margin bottom: mb-4
- Messages:
* Success: bg-green-50 border-green-200 text-green-700
* Error: bg-red-50 border-red-200 text-red-700
* Padding: px-4 py-3
* Border radius: rounded-xl
* Backdrop blur: backdrop-blur-sm
SEARCH AND FILTER SECTION:
- Background: backdrop-blur-xl bg-white/60
- Border radius: rounded-2xl
- Shadow: shadow-xl
- Border: border border-white/30
- Padding: p-6
- Margin bottom: mb-6
- Layout: flex flex-col gap-4
SEARCH BAR:
- Width: w-full
- Padding: px-4 py-3
- Border: border border-white/40
- Border radius: rounded-xl
- Background: backdrop-blur-sm bg-white/40
- Focus: focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-300/50
- Outline: outline-none
- Font size: text-base
- Transition: transition-all
- Shadow: shadow-sm
- Placeholder: "Search by job number, name, or client..."
FILTER BUTTONS:
- Layout: flex flex-wrap gap-1.5
- Buttons:
* Active state (All):
- Background: bg-indigo-600
- Text: text-white
- Hover: hover:bg-indigo-700
* Inactive state (Estimator/Status filters):
- Background: Pastel colors based on filter type
- Text: Matching text colors
- Hover: Darker shade
* Common styles:
- Flex: flex-1 sm:flex-none
- Padding: px-3 py-1.5
- Border radius: rounded-md
- Size: text-xs
- Weight: font-medium
- Transition: transition
- Focus: focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-1
VIEW TOGGLE:
- Container: mb-4 flex justify-end
- Toggle container:
* Background: backdrop-blur-xl bg-white/60
* Border: border border-white/30
* Border radius: rounded-2xl
* Padding: p-1
* Shadow: shadow-lg
* Layout: inline-flex
- Active button:
* Background: backdrop-blur-sm bg-indigo-600/90
* Text: text-white
* Border radius: rounded-xl
* Shadow: shadow-lg
* Hover: hover:bg-indigo-700/90
- Inactive button:
* Background: backdrop-blur-sm (transparent)
* Text: text-gray-700
* Border radius: rounded-xl
* Hover: hover:bg-white/40
JOBS TABLE VIEW:
- Container: backdrop-blur-xl bg-white/60 rounded-2xl shadow-xl border border-white/30 overflow-hidden
- Table container: overflow-x-auto
- Table structure: min-w-full divide-y divide-gray-200
- Header: backdrop-blur-sm bg-white/40
- Body: bg-white/30 divide-y divide-white/20
- Cells: px-3 sm:px-6 py-4 text-sm text-gray-900
JOBS CARD VIEW:
- Container: space-y-4
- Card structure:
* Background: backdrop-blur-xl bg-white/60
* Border radius: rounded-2xl
* Shadow: shadow-xl
* Border: border border-white/30
* Padding: p-6
* Hover: hover:shadow-2xl hover:border-white/50 hover:bg-white/70 hover:scale-[1.02]
* Transition: transition-all duration-300
* Cursor: cursor-pointer
- Card content:
* Job number: text-xl font-semibold text-gray-900
* Job name: text-base text-gray-600
* Grid layout: grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4
* Client section with phone number link
* Estimator badge
* Status badge
* Address section (if available):
- Address text
- Apple Maps button: backdrop-blur-sm bg-gray-900/90 rounded-xl shadow-lg
- Google Maps button: backdrop-blur-sm bg-blue-600/90 rounded-xl shadow-lg
* Type and Division in nested grid
PAGINATION:
- Container: mt-4 flex justify-between items-center
- Styled pagination controls
JOB DASHBOARD MODAL:
- Overlay:
* Position: fixed inset-0
* Background: backdrop-blur-sm bg-black/20
* Overflow: overflow-y-auto
* Z-index: z-50
* Hidden by default: hidden class
MODAL CONTENT:
- Container:
* Position: relative top-0 sm:top-10
* Margin: mx-auto
* Padding: p-4 sm:p-6
* Width: w-full sm:max-w-7xl
* Shadow: shadow-2xl
* Border radius: rounded-none sm:rounded-3xl
* Background: backdrop-blur-2xl bg-white/80
* Border: border border-white/30
* Margin bottom: mb-0 sm:mb-10
* Min height: min-h-screen sm:min-h-[600px]
MODAL HEADER:
- Background: backdrop-blur-xl bg-white/60 rounded-2xl shadow-xl border border-white/30 p-6 mb-6
- Layout: flex flex-col lg:flex-row justify-between items-start gap-4
- Title: "Job Dashboard"
* Size: text-2xl
* Weight: font-bold
* Color: text-gray-900
* Margin bottom: mb-2
- Quick Info Card:
* Background: backdrop-blur-xl bg-white/40
* Border radius: rounded-2xl
* Padding: p-4
* Border: border border-white/30
* Shadow: shadow-lg
* Min width: min-w-[250px]
MODAL TABS:
- Border bottom: border-b border-gray-200
- Navigation: flex space-x-8 overflow-x-auto
- Tab buttons:
* Active:
- Border: border-indigo-500
- Text: text-indigo-600
- Border bottom: border-b-2
- Weight: font-medium
- Size: text-sm
- Padding: py-2 px-1
- White space: whitespace-nowrap
* Inactive:
- Border: border-transparent
- Text: text-gray-500
- Hover: hover:text-gray-700 hover:border-gray-300
- Border bottom: border-b-2
- Weight: font-medium
- Size: text-sm
- Padding: py-2 px-1
- White space: whitespace-nowrap
TABS:
1. Overview (always visible)
2. Team & Client
3. Dates & Links
4. Status Flags
5. Notes (hidden for new jobs, shown for existing)
MODAL FORM SECTIONS:
- Each section in a card:
* Background: backdrop-blur-xl bg-white/60
* Border radius: rounded-2xl
* Shadow: shadow-xl
* Border: border border-white/30
* Padding: p-6
- Section title:
* Size: text-lg
* Weight: font-semibold
* Color: text-gray-900
* Margin bottom: mb-4
FORM FIELDS (Grid Layout):
- Grid: grid-cols-1 sm:grid-cols-2
- Gap: gap-4
FORM FIELD STYLING:
- Label:
* Display: block
* Size: text-sm
* Weight: font-medium
* Color: text-gray-700
* Margin bottom: mb-1
- Input/Select:
* Width: w-full
* Padding: px-3 py-2
* Border: border border-white/40
* Border radius: rounded-xl
* Background: backdrop-blur-sm bg-white/40
* Focus: focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-300/50
* Outline: outline-none
* Font size: text-base
* Transition: transition-all
* Shadow: shadow-sm
FORM BUTTONS:
- Layout: flex flex-col sm:flex-row justify-end
- Spacing: space-y-2 sm:space-y-0 sm:space-x-3
- Padding top: pt-4
- Border top: border-t border-gray-200
- Cancel button:
* Width: w-full sm:w-auto
* Padding: px-6 py-2.5
* Background: backdrop-blur-sm bg-white/60
* Border: border border-white/40
* Text: text-gray-700
* Border radius: rounded-xl
* Shadow: shadow-lg
* Hover: hover:bg-white/80 hover:shadow-xl
* Transition: transition-all
- Save button:
* Width: w-full sm:w-auto
* Padding: px-6 py-2.5
* Background: backdrop-blur-sm bg-indigo-600/90
* Text: text-white
* Border radius: rounded-xl
* Shadow: shadow-lg
* Hover: hover:bg-indigo-700/90 hover:shadow-xl
* Transition: transition-all
NOTES SECTION:
- Add Note button:
* Background: bg-indigo-600
* Text: text-white
* Padding: px-3 py-1.5
* Border radius: rounded-lg
* Size: text-sm
* Weight: font-medium
* Hover: hover:bg-indigo-700
- Notes list:
* Container: space-y-4
* Max height: max-h-[500px]
* Overflow: overflow-y-auto
- Add Note form:
* Hidden by default: hidden
* Background: bg-gray-50
* Padding: p-4
* Border radius: rounded-lg
* Border: border border-gray-200
================================================================================
PAGE 4: NOTES PAGE (notes.html)
================================================================================
LAYOUT STRUCTURE:
- Same navigation header as jobs page
- Main content with table and modal
NAVIGATION HEADER:
- Same as jobs page
- Title: "Employee Reports"
MAIN CONTENT AREA:
- Container: max-w-7xl mx-auto
- Padding: px-4 sm:px-6 lg:px-8 py-8
PAGE HEADER:
- Layout: flex flex-col sm:flex-row justify-between items-start sm:items-center
- Gap: gap-4
- Margin bottom: mb-6
- Title: "Job Notes"
* Size: text-xl sm:text-2xl
* Weight: font-bold
* Color: text-gray-800
* Margin bottom: mb-2
- Subtitle: "Manage job notes and reports"
* Size: text-sm sm:text-base
* Color: text-gray-600
- Add Note Button:
* Background: bg-indigo-600
* Text: text-white
* Padding: px-4 sm:px-6 py-2 sm:py-3
* Border radius: rounded-lg
* Size: text-sm sm:text-base
* Weight: font-medium
* Hover: hover:bg-indigo-700
* Focus: focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2
* Width: w-full on mobile, auto on desktop
* Text: "+ Add Note"
MESSAGE CONTAINER:
- Same as jobs page
REPORTS TABLE CONTAINER:
- Hidden by default: hidden class
- Background: backdrop-blur-xl bg-white/60
- Border radius: rounded-2xl
- Shadow: shadow-xl
- Border: border border-white/30
- Overflow: overflow-hidden
================================================================================
PAGE 5: PREFERENCES PAGE (preferences.html)
================================================================================
LAYOUT STRUCTURE:
- Same navigation header as other pages
- Main content with preferences form
NAVIGATION HEADER:
- Same as other pages
- Back link: "← Dashboard"
MAIN CONTENT AREA:
- Container: max-w-4xl mx-auto
- Padding: px-4 sm:px-6 lg:px-8 py-8
PAGE HEADER:
- Title: "Preferences"
* Size: text-2xl sm:text-3xl
* Weight: font-bold
* Color: text-gray-900
* Margin bottom: mb-2
- Subtitle: "Customize your Job-Pages experience"
* Size: text-sm sm:text-base
* Color: text-gray-600
PREFERENCES FORM:
- Container: backdrop-blur-xl bg-white/60 rounded-2xl shadow-xl border border-white/30 p-6
- Layout: space-y-6
DARK MODE SECTION:
- Layout: flex items-center justify-between
- Padding: py-4
- Border bottom: border-b border-white/20
- Title: "Dark Mode"
* Size: text-lg
* Weight: font-semibold
* Color: text-gray-900
* Margin bottom: mb-1
- Description: "Switch between light and dark themes"
* Size: text-sm
* Color: text-gray-600
- Toggle switch: Custom styled checkbox with toggle appearance
DEFAULT VIEW SECTION:
- Padding: py-4
- Border bottom: border-b border-white/20
- Title: "Default View"
* Size: text-lg
* Weight: font-semibold
* Color: text-gray-900
* Margin bottom: mb-2
- Description: "Choose your preferred default view for the jobs page"
* Size: text-sm
* Color: text-gray-600
* Margin bottom: mb-4
- Options container: flex flex-col sm:flex-row gap-4
VIEW OPTION (Radio Button):
- Label container:
* Layout: flex items-center
* Padding: p-4
* Border: border-2 border-white/30
* Background: backdrop-blur-sm bg-white/40
* Border radius: rounded-2xl
* Cursor: cursor-pointer
* Hover: hover:border-indigo-500/50 hover:bg-white/60
* Transition: transition-all
* Shadow: shadow-sm
- Selected state (via JavaScript):
* Border: border-indigo-500
* Background: bg-indigo-50/50
* Shadow: shadow-md
- Radio input: sr-only (screen reader only)
- Content:
* Icon: SVG, w-6 h-6, text-gray-400 (text-indigo-600 when selected)
* Title: font-medium text-gray-900 (text-indigo-600 when selected)
* Description: text-sm text-gray-500
SAVE BUTTON:
- Layout: flex justify-end pt-4
- Button:
* Padding: px-6 py-2.5
* Background: backdrop-blur-sm bg-indigo-600/90
* Text: text-white
* Border radius: rounded-xl
* Shadow: shadow-lg
* Hover: hover:bg-indigo-700/90 hover:shadow-xl
* Transition: transition-all
================================================================================
INTERACTIVE ELEMENTS AND STATES
================================================================================
BUTTON STATES:
- Default: Base styles with backdrop-blur and semi-transparent background
- Hover: Darker background color, increased shadow, scale effect
- Focus: Ring outline (focus:ring-2 focus:ring-indigo-500/50)
- Disabled: Reduced opacity (disabled:opacity-50 disabled:cursor-not-allowed)
- Active: Applied to filter buttons and view toggle when selected
INPUT STATES:
- Default: Border white/40, backdrop-blur-sm bg-white/40
- Focus: Ring indigo-500/50, border indigo-300/50
- Error: Red border and background (shown in error messages)
LOADING STATES:
- Pulse animation: animate-pulse
- Spinner: animate-spin
- Placeholder text: "Loading..." or "..."
- Loading row in tables: Centered text-gray-500
MODAL STATES:
- Hidden: hidden class (display: none)
- Visible: Remove hidden class
- Full screen on mobile, centered on desktop
- Backdrop blur effect on overlay
CARD STATES:
- Default: backdrop-blur-xl bg-white/60
- Hover: hover:bg-white/70 hover:shadow-2xl hover:border-white/50 hover:scale-[1.02]
- Transition: transition-all duration-300
AVATAR STATES:
- Default: Gradient background with shadow-lg shadow-indigo-500/30
- Hover: hover:scale-105 hover:shadow-indigo-500/50
- Transition: transition-all duration-300
DROPDOWN STATES:
- Hidden: hidden class
- Visible: Remove hidden class
- Items: hover:bg-white/40 (or hover:bg-red-50/50 for destructive)
================================================================================
RESPONSIVE BEHAVIOR
================================================================================
MOBILE (< 640px):
- Single column layouts
- Full-width buttons
- Stacked navigation elements
- Full-screen modals (rounded-none)
- Smaller text sizes (text-sm)
- Reduced padding
- Avatar stays right-aligned (justify-end)
TABLET (640px - 1024px):
- Two-column grids where applicable
- Horizontal navigation
- Constrained modals (rounded-3xl)
- Medium text sizes
- Flexible layouts
DESKTOP (> 1024px):
- Multi-column layouts
- Max-width containers (max-w-7xl)
- Side-by-side elements
- Larger text and spacing
- Optimal glassmorphism visibility
================================================================================
ICONS AND VISUAL ELEMENTS
================================================================================
ICONS USED (SVG):
- Table icon (View toggle)
- Grid/Cards icon (View toggle)
- Arrow right icon (Card view, navigation)
- Close/X icon (Modals)
- Location icon (Address section)
- User/People icon (Dashboard)
- Document icon (Dashboard)
ICON STYLING:
- Stroke-based SVG icons
- Current color inheritance
- Sizes: w-5 h-5, w-6 h-6
- Rounded icon containers with colored backgrounds (where applicable)
BADGES:
- Estimator badges: Pastel colored backgrounds
* Steve: bg-orange-100 text-orange-800
* Beth: bg-blue-100 text-blue-800
* Timothy: bg-purple-100 text-purple-800
* Others: bg-gray-100 text-gray-800
- Status badges: Color-coded based on status
* Billed: bg-purple-200 text-purple-800
* Est Hold: bg-orange-200 text-orange-800
* Est Sent/Follow Up: bg-yellow-200 text-yellow-800
* Estimating: bg-blue-200 text-blue-800
* In Progress/Awarded: bg-green-200 text-green-800
* Not Awarded/Not Bidding: bg-red-200 text-red-800
* Archive: bg-gray-200 text-gray-700
================================================================================
ANIMATIONS AND TRANSITIONS
================================================================================
TRANSITIONS:
- All interactive elements: transition-all or transition-colors
- Duration: duration-300 for smooth animations
- Hover effects: Smooth color, shadow, and scale changes
- Shadow changes: Included in transition-all
ANIMATIONS:
- Pulse: animate-pulse (for loading states)
- Spin: animate-spin (for loading spinners)
- Scale: hover:scale-105 (avatars), hover:scale-[1.02] (cards)
================================================================================
USER PREFERENCES SYSTEM
================================================================================
STORAGE:
- Location: PocketBase users collection
- Column: PRISM (JSON)
- Key: "Job-Pages" (isolated from other applications)
- Structure:
{
"Job-Pages": {
"darkMode": boolean,
"defaultView": "table" | "card"
}
}
PREFERENCES AVAILABLE:
1. Dark Mode
- Toggle switch
- Applied immediately on change
- Persists across sessions
2. Default View
- Radio button selection
- Options: Table View, Card View
- Applied on jobs page load
- Can be overridden by user selection during session
ACCESS:
- Preferences page accessible from user dropdown menu
- Link: "Preferences" in dropdown
- All pages initialize dark mode from preferences on load
================================================================================
ACCESSIBILITY FEATURES
================================================================================
- Focus states: Visible ring outlines on all interactive elements
- Semantic HTML: Proper use of headings, labels, forms
- ARIA attributes: Implicit through semantic HTML
- Keyboard navigation: All interactive elements are keyboard accessible
- Color contrast: High contrast text on backgrounds
- Responsive text: Scales appropriately on different screen sizes
- Screen reader support: sr-only class for hidden but accessible elements
================================================================================
PERFORMANCE OPTIMIZATIONS
================================================================================
- backdrop-blur used strategically (not on every element)
- Transitions optimized with transition-all
- Lazy loading for modals and heavy content
- Efficient DOM updates
- Minimal re-renders
================================================================================
CURRENT IMPLEMENTATION STATUS
================================================================================
PAGES:
✓ Login Page (index.html) - Standard design
✓ Dashboard (dashboard.html) - Full liquid glass
✓ Jobs Page (jobs.html) - Full liquid glass
✓ Notes Page (notes.html) - Full liquid glass
✓ Preferences Page (preferences.html) - Full liquid glass
COMPONENTS:
✓ Navigation bar with glassmorphism
✓ User avatar with gradient and dropdown
✓ Cards and containers
✓ Search/filter sections
✓ View toggle buttons
✓ Tables with glassmorphism
✓ Modals with glassmorphism
✓ Form inputs and selects
✓ Buttons (all states)
✓ Preferences page with interactive radio options
✓ Job cards with address and map buttons
✓ Badges (estimator and status)
FEATURES:
✓ Dark mode preference (stored in PRISM)
✓ Default view preference (stored in PRISM)
✓ User preferences persistence
✓ Responsive design
✓ Smooth transitions and animations
================================================================================
END OF DOCUMENTATION
================================================================================