candle-annotator/openspec/changes/enhance-annotation-features-and-deployment/specs/hacker-theme/spec.md
Marko Djordjevic a236d2c065 feat: create comprehensive specs for all four capabilities
- line-deletion: keyboard shortcuts and bulk delete with confirmation
- label-management: full CRUD UI in sidebar with search/filter
- docker-deployment: multi-stage build, compose, health checks
- hacker-theme: matrix-style colors, neon glows, monospace fonts
2026-02-12 14:44:45 +01:00

274 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## ADDED Requirements
### Requirement: Monospace typography
The application SHALL use monospace fonts throughout the entire interface.
#### Scenario: Primary font family
- **WHEN** CSS font-family is applied
- **THEN** system uses font stack: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace
#### Scenario: Font loading
- **WHEN** application loads
- **THEN** system loads JetBrains Mono font from Google Fonts or local files with weights: 400, 500, 700
#### Scenario: All text elements
- **WHEN** rendering any text (buttons, labels, inputs, tooltips, headings)
- **THEN** all text uses monospace font family without exception
#### Scenario: Number formatting
- **WHEN** displaying numbers (prices, timestamps, counts)
- **THEN** uses tabular-nums CSS property for aligned columns
### Requirement: Matrix-style color scheme
The application SHALL use a dark background with neon green (#00ff41) accent color scheme.
#### Scenario: Background colors
- **WHEN** rendering main layout
- **THEN** page background is #0a0e0a (near black), sidebar background is #0d110d, and chart background is #000000
#### Scenario: Primary accent color
- **WHEN** highlighting interactive elements, active states, or success messages
- **THEN** uses #00ff41 (matrix green) as the primary accent color
#### Scenario: Secondary accent colors
- **WHEN** rendering labels or status indicators
- **THEN** uses #ff0040 (neon red) for break_down/destructive, #00ff41 (neon green) for break_up/success, #00d4ff (neon cyan) for informational, #ffff00 (neon yellow) for warnings
#### Scenario: Text colors
- **WHEN** rendering text
- **THEN** primary text is #00ff41, secondary text is #00cc33 (dimmer green), and disabled text is #003311 (very dim green)
#### Scenario: Border colors
- **WHEN** rendering borders
- **THEN** uses #00ff41 with 1px solid for active elements, #003311 for inactive borders
### Requirement: Neon glow effects
The application SHALL apply glow effects to active and interactive elements.
#### Scenario: Button hover glow
- **WHEN** user hovers over any button
- **THEN** button shows box-shadow: 0 0 10px #00ff41, 0 0 20px #00ff4180
#### Scenario: Active tool glow
- **WHEN** a tool is active (selected)
- **THEN** button shows pulsing glow animation with box-shadow: 0 0 15px #00ff41, 0 0 30px #00ff4180
#### Scenario: Selected element glow
- **WHEN** a line or label is selected
- **THEN** element shows glow effect with filter: drop-shadow(0 0 8px #00ff41)
#### Scenario: Input focus glow
- **WHEN** user focuses on text input or search field
- **THEN** input shows border glow: box-shadow: 0 0 8px #00ff41
#### Scenario: Cursor circle glow
- **WHEN** drawing line with cursor circle visible
- **THEN** cursor circle has stroke glow with filter: drop-shadow(0 0 4px currentColor)
### Requirement: ASCII-style borders
The application SHALL use terminal-inspired border styling with corner characters.
#### Scenario: Container borders
- **WHEN** rendering bordered containers (Toolbox, label list sections)
- **THEN** uses 1px solid borders with #00ff41 color
#### Scenario: Border corners with pseudo-elements
- **WHEN** rendering section headers or important containers
- **THEN** uses CSS ::before and ::after pseudo-elements to display ASCII corner characters: ┌ ┐ └ ┘
#### Scenario: Separator lines
- **WHEN** rendering section separators
- **THEN** uses border-top: 1px solid #003311 with optional ASCII characters (─) via pseudo-elements
#### Scenario: Card-style containers
- **WHEN** rendering label list entries or modal dialogs
- **THEN** containers have 1px solid border with subtle inset shadow for depth
### Requirement: Terminal-like feedback messages
The application SHALL display command-style feedback for user actions.
#### Scenario: Success message format
- **WHEN** user completes an action successfully (delete, create, export)
- **THEN** displays message in format: `> SUCCESS: <action> completed [<count> items]` in green text
#### Scenario: Error message format
- **WHEN** an error occurs
- **THEN** displays message in format: `> ERROR: <description> [code: <error_code>]` in red text
#### Scenario: Info message format
- **WHEN** displaying informational message
- **THEN** displays message in format: `> INFO: <message>` in cyan text
#### Scenario: Message container styling
- **WHEN** displaying any feedback message
- **THEN** container has monospace font, left-aligned text, subtle border, and auto-dismiss after 4 seconds
#### Scenario: Message animation
- **WHEN** feedback message appears
- **THEN** slides in from top with fade-in animation (0.3s ease-out)
### Requirement: Minimalist icon treatment
The application SHALL use simplified, outline-style icons or ASCII alternatives.
#### Scenario: Lucide icon styling
- **WHEN** rendering Lucide React icons
- **THEN** icons use stroke-width: 1.5, size: 20px, and color matches text color (#00ff41)
#### Scenario: Icon hover effect
- **WHEN** user hovers over icon button
- **THEN** icon glows with filter: drop-shadow(0 0 4px currentColor)
#### Scenario: ASCII alternative icons (optional)
- **WHEN** rendering simple actions (delete, expand, collapse)
- **THEN** optionally uses ASCII characters: [×] for delete, [▼] for expand, [▲] for collapse, [>] for actions
#### Scenario: Icon color consistency
- **WHEN** icon is in active/selected state
- **THEN** icon color is #00ff41
- **WHEN** icon is in disabled state
- **THEN** icon color is #003311
### Requirement: High contrast for readability
The application SHALL maintain WCAG AA contrast ratios for all text.
#### Scenario: Primary text contrast
- **WHEN** displaying primary text (#00ff41) on dark background (#0a0e0a)
- **THEN** contrast ratio is at least 4.5:1 (WCAG AA standard)
#### Scenario: Secondary text contrast
- **WHEN** displaying secondary text (#00cc33) on dark background
- **THEN** contrast ratio is at least 4.5:1
#### Scenario: Button text contrast
- **WHEN** button is in any state (default, hover, active, disabled)
- **THEN** text maintains minimum 4.5:1 contrast with background
#### Scenario: Chart element visibility
- **WHEN** rendering lines and markers on chart
- **THEN** all annotations have sufficient contrast against black background and candles
### Requirement: Simplified button styling
The application SHALL use minimal, flat button design with terminal aesthetic.
#### Scenario: Default button appearance
- **WHEN** rendering buttons in default state
- **THEN** buttons have transparent background, 1px solid #00ff41 border, #00ff41 text, 4px padding, and no rounded corners (border-radius: 0)
#### Scenario: Hover button appearance
- **WHEN** user hovers over button
- **THEN** background changes to #00ff4110 (10% opacity), border glows, and text remains #00ff41
#### Scenario: Active button appearance
- **WHEN** button is active/pressed
- **THEN** background is #00ff4120 (20% opacity), border is 2px solid, and includes pulsing glow animation
#### Scenario: Disabled button appearance
- **WHEN** button is disabled
- **THEN** background is transparent, border is #003311, text is #003311, and no hover effects
#### Scenario: Destructive button styling
- **WHEN** button represents destructive action (delete)
- **THEN** uses #ff0040 (neon red) for border and text instead of green, with matching red glow on hover
### Requirement: Cyber-retro aesthetic elements
The application SHALL include subtle design elements that enhance the hacker theme.
#### Scenario: Scanline effect (optional)
- **WHEN** rendering main container
- **THEN** applies subtle CSS repeating-linear-gradient overlay simulating CRT scanlines with 2px spacing at 5% opacity
#### Scenario: Noise texture (optional)
- **WHEN** rendering background
- **THEN** applies subtle noise texture using CSS filter or background-image at 3% opacity for grain effect
#### Scenario: Typewriter animation for messages
- **WHEN** displaying new feedback message
- **THEN** text appears with brief letter-by-letter typing animation (0.02s per character, max 0.5s total)
#### Scenario: Flicker animation on focus
- **WHEN** user focuses on input field
- **THEN** border shows brief flicker animation (0.1s) simulating electrical surge
#### Scenario: ASCII art branding (optional)
- **WHEN** application loads or in header
- **THEN** displays application name in ASCII art style using monospace font
### Requirement: Responsive dark theme
The application SHALL maintain theme consistency across all components and states.
#### Scenario: Modal dialogs
- **WHEN** displaying confirmation dialogs
- **THEN** modal has dark background (#0d110d), neon green border, monospace font, and terminal-style title (e.g., "> CONFIRM ACTION")
#### Scenario: Input fields
- **WHEN** rendering text inputs or search fields
- **THEN** inputs have transparent background, #00ff41 border, #00ff41 text, #00ff4120 placeholder, and cursor color #00ff41
#### Scenario: Dropdown menus
- **WHEN** displaying filter or select dropdowns
- **THEN** dropdown has dark background (#0d110d), neon green border, #00ff41 option text, hover state with #00ff4120 background
#### Scenario: Scrollbars
- **WHEN** content requires scrolling
- **THEN** custom scrollbar with #003311 track, #00ff41 thumb, and 8px width
#### Scenario: Tooltips
- **WHEN** displaying tooltips on hover
- **THEN** tooltip has dark background (#0d110d), 1px #00ff41 border, monospace font, and terminal-style text
### Requirement: Animation performance
The application SHALL use performant CSS animations that don't impact chart rendering.
#### Scenario: GPU acceleration
- **WHEN** applying animations (glow, pulse, fade)
- **THEN** uses CSS transform and opacity properties with will-change hints for GPU acceleration
#### Scenario: Animation duration
- **WHEN** defining animations
- **THEN** all animations complete within 0.5s, with most hover effects at 0.2s
#### Scenario: Reduced motion support
- **WHEN** user has prefers-reduced-motion enabled
- **THEN** system disables glow animations, typewriter effects, and pulsing, keeping only instant transitions
#### Scenario: Chart performance
- **WHEN** theme is active and chart is rendering
- **THEN** SVG overlay and chart rendering maintains 60fps without jank from theme effects
### Requirement: Tailwind CSS configuration
The Tailwind config SHALL be updated to support hacker theme tokens.
#### Scenario: Custom colors in tailwind.config
- **WHEN** tailwind.config.js is parsed
- **THEN** defines custom colors: matrix: '#00ff41', matrixDim: '#00cc33', matrixDark: '#003311', neonRed: '#ff0040', neonCyan: '#00d4ff', neonYellow: '#ffff00', terminal: '#0a0e0a', terminalLight: '#0d110d'
#### Scenario: Custom font families
- **WHEN** tailwind.config.js is parsed
- **THEN** defines fontFamily: { mono: ['JetBrains Mono', 'Fira Code', 'Courier New', 'monospace'] }
#### Scenario: Custom animations
- **WHEN** tailwind.config.js is parsed
- **THEN** defines keyframes for 'glow-pulse', 'flicker', 'scanline-move' and corresponding animation utilities
#### Scenario: Custom shadows
- **WHEN** tailwind.config.js is parsed
- **THEN** defines boxShadow: { 'glow-sm': '0 0 8px #00ff41', 'glow': '0 0 15px #00ff41, 0 0 30px #00ff4180', 'glow-lg': '0 0 20px #00ff41, 0 0 40px #00ff4180' }
### Requirement: globals.css updates
The globals.css file SHALL define base styles and CSS variables for the hacker theme.
#### Scenario: CSS custom properties
- **WHEN** globals.css is loaded
- **THEN** defines CSS variables: --color-matrix, --color-matrix-dim, --color-matrix-dark, --color-neon-red, --color-neon-cyan, --color-terminal, --font-mono
#### Scenario: Base body styles
- **WHEN** page loads
- **THEN** body element has background: --color-terminal, color: --color-matrix, font-family: --font-mono, and -webkit-font-smoothing: antialiased
#### Scenario: Selection styling
- **WHEN** user selects text
- **THEN** selection background is #00ff4140 (40% opacity) and text is #00ff41
#### Scenario: Scrollbar styling
- **WHEN** globals.css is loaded
- **THEN** defines custom scrollbar styles using ::-webkit-scrollbar pseudo-elements with theme colors