The old 'background-position' animation was still present and
overriding the new slower 'translateY' version. Now only the
30s animation remains active.
- Removed AudioContext setup and management
- Removed playCrtPowerOnSound() function (95 lines)
- Removed audio unlock listeners
- Cleaned up handlePowerOn comment
Audio caused issues with browser autoplay policies and added
unnecessary complexity. Terminal animation works fine without it.
- Make playCrtPowerOnSound() async with proper AudioContext.resume()
- Add AudioContext unlock on first user interaction (click/touchstart)
- Add error handling for audio failures
- Ensures sound works in all browsers with autoplay restrictions
- Remove SN Pro Google Font import from globals.css
- Add Nunito font import with weights 400, 500, 600, 700
- Update CSS variables to use --font-nunito
- Apply Nunito as primary font family for body text
- Keep Geist Mono for monospace elements
- Add robots.txt and sitemap.xml (static files for export mode)
- Add OG image (1200x630) with terminal icon + branding
- Add Twitter Card meta tags (summary_large_image)
- Add canonical URL via metadataBase
- Add JSON-LD structured data (SoftwareSourceCode schema)
- Add <main> landmark and skip-navigation link for accessibility
- Add preconnect hints for Google Fonts, Google Static, and Umami
- Add web app manifest (site.webmanifest)
- Add meta keywords for secondary search engines
- Add aria-hidden on decorative SF Symbol icons
- Powered-off terminal shows no text (realistic CRT behavior)
- Add permanent glass sheen with diagonal specular highlight in theme color
- Glass overlay covers full screen area with vignette effect
- Reduce Palette protocol from 18 to 13 essential properties
- Add BlockPalette protocol with surfaceBackground, surfaceHeaderBackground, elevatedBackground
- BlockPalette defaults compute via lighter(by:) from background
- Add Color.rgbComponents for universal ANSI/256/RGB conversion
- Make lighter(by:), darker(by:), opacity() work on all color types
- Migrate views to use BlockPalette accessors
- Remove NCursesPalette (to be reworked later)
- Update all 6 palette structs to BlockPalette conformance
- Update DocC articles, topic index, and palette-preview.html
- All 492 tests in 83 suites passing
- Move media queries after base styles (fixes 2-column on mobile)
- Fix hue bar losing gradient in vertical layout (flex: none + width: 100%)
- Add statusBarBackground to Backgrounds swatch group
- Add foregroundPlaceholder to all palettes and Foregrounds group
- Remove deleted properties from palette data and swatchGroups
- Update existing palettes with correct SDK values including Violet HSL hex
Remove borderFocused, separator, selection, selectionBackground, disabled,
statusBarForeground, statusBarHighlight from Palette protocol and all
consumers. Views now use palette essentials directly (e.g. palette.accent
instead of palette.borderFocused, palette.foregroundTertiary instead of
palette.disabled). Update tests and DocC articles accordingly.
Remove explicit borderFocused, selection, selectionBackground,
statusBarForeground, statusBarHighlight from all palette implementations.
These remain as default-derived properties on the protocol extension.
Add foregroundPlaceholder as 4th foreground level for input field
placeholder text, dimmer than foregroundTertiary.
Fix SwiftLint force_try violations in luminance tests.
- Add BluePalette (VFD-style, #00AAFF base) and VioletPalette (HSL-generated from hue 270°)
- Remove GeneratedPalette entirely (replaced by dedicated VioletPalette)
- Reorder palette cycling: Green → Amber → Red → Violet → Blue → White → NCurses
- Sync all landing page CSS theme colors with exact Swift palette values
- Add blue theme to landing page with matching VFD colors
- Fix theme switcher FOUC: useEffect syncs React state after hydrate
- Update default theme to Green (was Amber)
- Update landing page logo to latest DocC version