archy/.cursor/rules/UI-STANDARDS.md
Dorian 337ebee510 Revise BUILD-GUIDE and enhance ISO build process
- Updated BUILD-GUIDE.md to streamline instructions for building the Archipelago Auto-Installer ISO, including prerequisites and post-installation steps.
- Added detailed sections on capturing the live server state and building from source.
- Enhanced Docker and Podman integration in build scripts for improved backend and web UI capture.
- Introduced new app metadata for "IndeedHub" in the Docker package scanner and updated UI components for better installation progress tracking.
- Improved styling and functionality in the Bitcoin UI for a more cohesive user experience.
2026-02-03 21:43:33 +00:00

356 lines
8.3 KiB
Markdown

# Archipelago UI Standards & Coding Rules
## Core Design System
Archipelago uses a **glassmorphism-based design system** with dark backgrounds, subtle transparency, and elegant blur effects. All UI components should follow these established patterns.
---
## Standard Interactive Card: `.path-option-card`
**This is our PRIMARY interactive card component.** Use this pattern for all selectable/clickable card containers.
### Base Styles
```css
.path-option-card {
position: relative;
background: rgba(0, 0, 0, 0.60);
backdrop-filter: blur(24px);
-webkit-backdrop-filter: blur(24px);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.45),
inset 0 1px 0 rgba(255, 255, 255, 0.22);
border-radius: 16px;
padding: 12px 10px;
transition: all 0.3s ease;
cursor: pointer;
border: none;
}
```
### Gradient Border Effect (Default - Subtle)
```css
.path-option-card::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
padding: 2px;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.8), transparent);
-webkit-mask:
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
```
### Hover State
```css
.path-option-card:hover {
transform: translateY(-2px);
background: rgba(0, 0, 0, 0.35);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.6),
inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
.path-option-card:hover::before {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.3), transparent);
}
```
### Selected State
```css
.path-option-card--selected {
background: rgba(255, 255, 255, 0.12);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.6),
0 0 30px rgba(255, 255, 255, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.35);
transform: translateY(-2px);
}
.path-option-card--selected::before {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.6), transparent);
}
```
### Icon Styling
```css
.path-option-card svg {
color: rgba(255, 255, 255, 0.85);
filter:
drop-shadow(0 1px 1px rgba(255, 255, 255, 0.3))
drop-shadow(0 2px 4px rgba(0, 0, 0, 0.8))
drop-shadow(0 -1px 2px rgba(0, 0, 0, 0.6));
stroke-width: 2.5;
}
.path-option-card:hover svg {
color: rgba(255, 255, 255, 1);
filter:
drop-shadow(0 1px 2px rgba(255, 255, 255, 0.5))
drop-shadow(0 3px 6px rgba(0, 0, 0, 0.9));
}
```
---
## Button Standards
### Primary Action Button: `.gradient-button`
Use for main actions like **Launch**, **Install**, **Save**, **Submit**
```css
.gradient-button {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, rgba(0, 0, 0, 0.8) 100%);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
color: rgba(255, 255, 255, 0.95);
transition: all 0.3s ease;
}
.gradient-button:hover {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(0, 0, 0, 0.9) 100%);
border-color: rgba(255, 255, 255, 0.3);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6);
}
```
### Secondary Action Button: `.glass-button`
Use for secondary actions like **Cancel**, **Close**, **Back**
```css
.glass-button {
background-color: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(18px);
border: 1px solid rgba(255, 255, 255, 0.18);
color: rgba(255, 255, 255, 0.9);
transition: all 0.3s ease;
}
.glass-button:hover {
color: white;
}
```
### Path Action Button: `.path-action-button`
Use for onboarding/path selection flows (**Continue**, **Skip**)
```css
.path-action-button {
font-size: 18px;
font-weight: 500;
border-radius: 16px;
background: rgba(0, 0, 0, 0.25);
color: rgba(255, 255, 255, 0.96);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.45),
inset 0 1px 0 rgba(255, 255, 255, 0.22);
backdrop-filter: blur(24px);
border: none;
cursor: pointer;
transition: all 0.3s ease;
}
.path-action-button:hover {
transform: translateY(-2px);
background: rgba(0, 0, 0, 0.35);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.6),
inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
```
---
## Container Standards
### Glass Card: `.glass-card`
Use for content containers, modals, panels
```css
.glass-card {
background-color: rgba(0, 0, 0, 0.65);
backdrop-filter: blur(18px);
-webkit-backdrop-filter: blur(18px);
border: 1px solid rgba(255, 255, 255, 0.18);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
border-radius: 1rem;
overflow-x: hidden;
overflow-y: visible;
}
```
### Gradient Card: `.gradient-card`
Use for featured content, highlighted sections
```css
.gradient-card {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(0, 0, 0, 0.8) 100%);
backdrop-filter: blur(18px);
border: 1px solid rgba(255, 255, 255, 0.15);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
border-radius: 1rem;
}
```
---
## Color Palette
### Primary Colors
- **White text**: `rgba(255, 255, 255, 0.9)` (primary)
- **White text hover**: `rgba(255, 255, 255, 1)` (full white)
- **Muted text**: `rgba(255, 255, 255, 0.6)` - `rgba(255, 255, 255, 0.7)`
### Background Colors
- **Dark overlay**: `rgba(0, 0, 0, 0.8)` - `rgba(0, 0, 0, 0.9)`
- **Glass background**: `rgba(0, 0, 0, 0.6)` - `rgba(0, 0, 0, 0.65)`
- **Light glass**: `rgba(0, 0, 0, 0.35)`
### Border Colors
- **Subtle border**: `rgba(255, 255, 255, 0.18)`
- **Prominent border**: `rgba(255, 255, 255, 0.2)` - `rgba(255, 255, 255, 0.3)`
### Accent Colors
- **Orange** (Bitcoin/sync): `#fb923c` - `#f59e0b`
- **Green** (success): `#4ade80`
- **Red** (danger): `#ef4444`
- **Blue** (info): `#3b82f6`
---
## Animation Standards
### Transitions
- **Standard**: `all 0.3s ease`
- **Fast**: `all 0.15s ease`
- **Slow**: `all 0.5s ease-in-out`
### Transform on Hover
```css
transform: translateY(-2px);
```
### Transform on Active/Click
```css
transform: translateY(1px);
```
---
## Blur Effects
- **Standard blur**: `blur(18px)`
- **Strong blur**: `blur(24px)` - `blur(40px)`
- **Light blur**: `blur(10px)`
---
## Shadow Standards
### Card Shadows
```css
/* Default */
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
/* Hover */
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.6);
/* With inset highlight */
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.45),
inset 0 1px 0 rgba(255, 255, 255, 0.22);
```
---
## Icon Guidelines
### Icon Shadow Effects
```css
filter:
drop-shadow(0 1px 1px rgba(255, 255, 255, 0.3))
drop-shadow(0 2px 4px rgba(0, 0, 0, 0.8))
drop-shadow(0 -1px 2px rgba(0, 0, 0, 0.6));
```
### Icon Colors
- **Default**: `rgba(255, 255, 255, 0.85)`
- **Hover**: `rgba(255, 255, 255, 1)`
- **Muted**: `rgba(255, 255, 255, 0.6)`
### Stroke Width
- **Standard**: `2.5`
- **Thin**: `2`
- **Bold**: `3`
---
## Usage Rules
### DO:
✅ Use `.path-option-card` for all interactive/selectable cards
✅ Use `.gradient-button` for primary actions
✅ Use `.glass-card` for content containers
✅ Add subtle `translateY(-2px)` on hover
✅ Use `backdrop-filter: blur()` for glass effects
✅ Include inset highlights: `inset 0 1px 0 rgba(255, 255, 255, 0.22)`
✅ Use gradient borders with CSS masks for subtle elevation
✅ Maintain 0.3s ease transitions for smooth interactions
### DON'T:
❌ Create custom card styles - extend existing ones
❌ Use solid backgrounds - always use transparency + blur
❌ Ignore hover states - all interactive elements need hover feedback
❌ Mix different border styles - use gradient mask or single border
❌ Use hard shadows - keep shadows soft with blur
❌ Forget `-webkit-backdrop-filter` for Safari support
---
## Responsive Considerations
### Mobile Adjustments
- Reduce padding by ~25% on small screens
- Reduce blur slightly for performance (`blur(12px)` instead of `blur(18px)`)
- Simplify animations (consider `prefers-reduced-motion`)
- Touch targets minimum 44x44px
### Breakpoints
```css
/* Mobile first */
sm: 640px /* Small tablets */
md: 768px /* Tablets */
lg: 1024px /* Desktops */
xl: 1280px /* Large desktops */
```
---
## Accessibility
- Ensure sufficient contrast (WCAG AA minimum)
- Include `:focus-visible` states matching `:hover`
- Use semantic HTML (`<button>`, `<nav>`, etc.)
- Include ARIA labels where needed
- Support keyboard navigation
---
## File Locations
- **Global styles**: `/neode-ui/src/style.css`
- **Component styles**: Scoped `<style>` blocks in `.vue` files
- **Tailwind config**: `/neode-ui/tailwind.config.js`
- **Assets**: `/neode-ui/public/assets/`
---
## Version
Last updated: 2026-02-03
Archipelago UI Standards v1.0