1188 lines
34 KiB
Plaintext
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
|
|
================================================================================
|