
Windows 3 1 Web Designer
- 121 installs
- 178 repo stars
- Updated July 14, 2026
- erichowens/some_claude_skills
Build nostalgic Windows 3.1-style web UIs with period-accurate chrome, beveled buttons, system fonts, and retro window metaphors for demos or themed experiences.
About
Specializes in faithfully recreating Windows 3.1 desktop aesthetics for the web, including beveled buttons, system-style window frames, period typography, and nostalgic interaction patterns for themed sites, demos, and playful product experiences.
- retro UI
- Windows 3.1 chrome
- beveled controls
- nostalgic branding
- themed demos
Windows 3 1 Web Designer by the numbers
- 121 all-time installs (skills.sh)
- Ranked #1,062 of 1,880 Design & UI/UX skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/erichowens/some_claude_skills --skill windows-3-1-web-designerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 121 |
|---|---|
| repo stars | ★ 178 |
| Last updated | July 14, 2026 |
| Repository | erichowens/some_claude_skills ↗ |
What it does
Build nostalgic Windows 3.1-style web UIs with period-accurate chrome, beveled buttons, system fonts, and retro window metaphors for demos or themed experiences.
Files
Windows 3.1 Web Designer
Creates modern 2026 web applications with authentic Windows 3.1 aesthetic. Not recreating 1992—extrapolating Win31 to modern contexts: AI assistants as Cue Card systems, mobile as pocket organizers, responsive as tiled MDI windows.
When to Use
Use for:
- Web apps with Win31 authenticity (documentation sites, retro dashboards)
- AI chatbot interfaces (Cue Card-style assistants, wizard dialogs)
- Mobile-responsive Win31 UIs (pocket computing paradigm)
- Program Manager navigation patterns
- Tiled/cascading window layouts
- MDI (Multiple Document Interface) applications
- Hotdog Stand mode easter eggs
Do NOT use for:
- Windows 95 aesthetic → use windows-95-web-designer (gradients, Start menu, taskbar)
- Vaporwave/synthwave → use vaporwave-glassomorphic-ui-designer (neons, gradients)
- macOS/iOS styling → use native-app-designer
- Flat/Material design → use web-design-expert
Win31 vs Win95: Critical Differences
| Feature | Windows 3.1 | Windows 95 |
|---|---|---|
| Title bar | Solid navy (#000080) | Gradient (dark→light blue) |
| Window controls | Single menu button | Three buttons (−, □, ×) |
| Navigation | Program Manager | Start Menu + Taskbar |
| Fonts | Bitmap/VT323 | MS Sans Serif, Tahoma |
| Icons | 32×32 flat | 32×32 with drop shadow |
| Depth | Bevels only | Bevels + subtle gradients |
| AI style | Cue Cards, Wizards | Clippy character |
---
Core Design System
Color Palette
| Color | Hex | CSS Variable | Usage |
|---|---|---|---|
| System Gray | #c0c0c0 | --win31-gray | THE primary background |
| Dark Gray | #808080 | --win31-dark-gray | Shadows, pressed states |
| Light Gray | #dfdfdf | --win31-light-gray | Highlights |
| Navy | #000080 | --win31-navy | Title bar (SOLID, no gradient) |
| Teal | #008080 | --win31-teal | Desktop, links, highlights |
| White | #ffffff | --win31-white | Beveled highlights, inputs |
| Black | #000000 | --win31-black | Beveled shadows, borders |
The Win31 Title Bar (SOLID)
THE signature Win31 element - solid navy, no gradient:
.win31-titlebar {
background: #000080; /* SOLID - never a gradient! */
color: white;
font-family: 'VT323', 'Courier New', monospace;
font-weight: bold;
font-size: 11px;
padding: 3px 6px;
display: flex;
align-items: center;
justify-content: space-between;
}
.win31-titlebar-inactive {
background: #808080; /* Solid dark gray when inactive */
}Window Control Button (Single)
Win31 has ONE control button (not Win95's three):
.win31-control-btn {
width: 18px;
height: 14px;
background: var(--win31-gray);
border: none;
font-size: 8px;
font-family: var(--font-pixel);
/* 3D bevel - outset */
box-shadow:
inset -1px -1px 0 var(--win31-black),
inset 1px 1px 0 var(--win31-white),
inset -2px -2px 0 var(--win31-dark-gray),
inset 2px 2px 0 var(--win31-light-gray);
}
.win31-control-btn:active {
box-shadow:
inset 1px 1px 0 var(--win31-black),
inset -1px -1px 0 var(--win31-white);
}The Sacred Rule: Beveled Borders
OUTSET (Raised) - Buttons, toolbars:
- Top/Left border: WHITE
- Bottom/Right border: BLACK
- Inner: light-gray TL, dark-gray BR
INSET (Sunken) - Text fields, content areas:
- Top/Left border: DARK GRAY
- Bottom/Right border: WHITE
- Inner: black TL, light-gray BR
Typography
| Use | Font | Fallback | Size |
|---|---|---|---|
| UI Labels | VT323 | Courier New | 12px |
| Title bars | VT323 Bold | Courier New Bold | 11px |
| Headings | Press Start 2P | VT323 | 14px |
| Code | IBM Plex Mono | Courier Prime | 12px |
Web font stack:
:root {
--font-win31-ui: 'VT323', 'Courier New', monospace;
--font-win31-pixel: 'Press Start 2P', 'VT323', monospace;
--font-win31-code: 'IBM Plex Mono', 'Courier Prime', monospace;
}---
Modern Extrapolations
AI Chatbots: The Cue Card Paradigm
Win31 would present AI as a modal wizard system, not an animated character:
┌─ AI Assistant ──────────────────────[─]─┐
│ │
│ ┌────────────────────────────────────┐ │
│ │ What would you like help with? │ │
│ │ │ │
│ │ ○ Writing a document │ │
│ │ ○ Working with files │ │
│ │ ○ Setting up your system │ │
│ │ ○ Learning Windows basics │ │
│ └────────────────────────────────────┘ │
│ │
│ [ OK ] [ Cancel ] [ Help ] │
└──────────────────────────────────────────┘Key patterns:
- No animated characters (pre-Clippy)
- One question at a time (modal)
- Radio button/numbered choices
- Step-by-step wizard indicators
- Cue Cards floating alongside app
Mobile: The Pocket Computing Paradigm
Win31 on mobile extrapolates to pocket organizer with Program Manager:
┌────────────────────────────┐
│ ■ Program Manager ─ 10:45 │ ← Title bar with time
├────────────────────────────┤
│ ╔════════════════════════╗ │
│ ║ Main ║ │
│ ╠════════════════════════╣ │
│ ║ ┌───┐ ┌───┐ ║ │
│ ║ │📁│ │📝│ ║ │ ← Program group
│ ║ │Mgr│ │Wrt│ ║ │
│ ║ └───┘ └───┘ ║ │
│ ╚════════════════════════╝ │
├────────────────────────────┤
│ [ Window ] [ Help ] │ ← Menu bar bottom
└────────────────────────────┘Key patterns:
- Program Manager is navigation (not Start menu)
- One window at a time (modal stack)
- Dialog stack pattern (overlays cascade)
- Menu bar at bottom for touch
- Swipe left = close window
Responsive: MDI as Breakpoints
Win31 used Multiple Document Interface. Apply this:
| Breakpoint | Win31 Metaphor | Layout |
|---|---|---|
| Mobile (<640px) | Pocket computing | Single window, modal dialogs |
| Tablet (640-1024px) | Laptop | Cascading windows |
| Desktop (>1024px) | Full desktop | Tiled MDI windows |
Theming: Hotdog Stand and Beyond
Windows 3.1 had limited but memorable themes:
/* Hotdog Stand (the infamous red/yellow) */
[data-theme="hotdog-stand"] {
--win31-gray: #ff0000;
--win31-dark-gray: #800000;
--win31-light-gray: #ff8080;
--win31-navy: #ffff00;
--win31-title-text: #ff0000;
}
/* Monochrome (high contrast) */
[data-theme="monochrome"] {
--win31-gray: #ffffff;
--win31-dark-gray: #000000;
--win31-light-gray: #ffffff;
--win31-navy: #000000;
--win31-teal: #000000;
}---
Component Patterns
Program Manager Window
.win31-program-manager {
position: fixed;
inset: 0;
background: var(--win31-teal);
display: flex;
flex-direction: column;
}
.win31-program-group {
background: var(--win31-gray);
border: 3px solid var(--win31-black);
box-shadow:
inset 2px 2px 0 var(--win31-white),
inset -2px -2px 0 var(--win31-dark-gray);
margin: 8px;
min-width: 200px;
}
.win31-program-group-titlebar {
background: var(--win31-navy);
color: var(--win31-white);
padding: 2px 6px;
font-family: var(--font-pixel);
font-size: 10px;
font-weight: bold;
}
.win31-program-icons {
display: grid;
grid-template-columns: repeat(auto-fill, 64px);
gap: 8px;
padding: 12px;
}Dialog Box
.win31-dialog {
min-width: 300px;
background: var(--win31-gray);
border: 3px solid var(--win31-black);
box-shadow:
inset 2px 2px 0 var(--win31-white),
inset -2px -2px 0 var(--win31-dark-gray),
4px 4px 0 var(--win31-black);
}
.win31-dialog-content {
padding: 16px;
display: flex;
gap: 16px;
}
.win31-dialog-icon {
width: 32px;
height: 32px;
flex-shrink: 0;
}
.win31-dialog-buttons {
display: flex;
justify-content: center;
gap: 8px;
padding: 8px 16px 16px;
}Menu Bar
.win31-menubar {
background: var(--win31-gray);
border-bottom: 2px solid var(--win31-dark-gray);
padding: 2px;
display: flex;
gap: 0;
}
.win31-menu-item {
padding: 4px 12px;
font-family: var(--font-pixel);
font-size: 11px;
cursor: pointer;
}
.win31-menu-item:hover,
.win31-menu-item--active {
background: var(--win31-navy);
color: var(--win31-white);
}
.win31-menu-dropdown {
position: absolute;
background: var(--win31-gray);
border: 2px solid;
border-color: var(--win31-white) var(--win31-black)
var(--win31-black) var(--win31-white);
min-width: 150px;
z-index: 100;
}Status Bar
.win31-statusbar {
display: flex;
gap: 2px;
padding: 2px;
background: var(--win31-gray);
border-top: 2px solid var(--win31-dark-gray);
}
.win31-statusbar-panel {
flex: 1;
padding: 2px 8px;
font-family: var(--font-pixel);
font-size: 10px;
border: 1px solid;
border-color: var(--win31-dark-gray) var(--win31-white)
var(--win31-white) var(--win31-dark-gray);
}---
Anti-Patterns
Anti-Pattern: Title Bar Gradients
Novice thinking: "Win31 has blue title bars like Win95" Reality: Win31 has SOLID navy. Gradient is Win95 only. Instead: background: #000080 (never linear-gradient)
Anti-Pattern: Three Window Buttons
Novice thinking: "Windows has minimize, maximize, close" Reality: Win31 has a SINGLE menu button (−). The three-button pattern is Win95. Instead: One button that opens a system menu
Anti-Pattern: Start Menu/Taskbar
Novice thinking: "Windows navigation = Start button" Reality: Win31 uses Program Manager. No taskbar, no Start. Instead: Program groups with cascading/tiled windows
Anti-Pattern: Neon Colors
Novice thinking: #00d4ff, #ff00ff for retro feel Reality: This is vaporwave, not Win31 Instead: Muted palette: teal (#008080), navy (#000080), gray (#c0c0c0)
Anti-Pattern: Rounded Corners
Novice thinking: border-radius: 8px for friendly UI Reality: Win31 has sharp 90° corners everywhere Instead: No border-radius (or 0)
Anti-Pattern: Blur Effects
Novice thinking: backdrop-filter: blur(10px), soft shadows Reality: Win31 has no blur—only hard-edge bevels Instead: Sharp bevel shadows: box-shadow: 4px 4px 0 #000
Anti-Pattern: Dark Backgrounds
Novice thinking: Dark mode = #1a1a2e backgrounds Reality: Win31 is LIGHT. System gray (#c0c0c0) everywhere. Instead: Light gray base with teal desktop
Anti-Pattern: Clippy-Style Characters
Novice thinking: Win31 had assistant characters Reality: Clippy came with Office 97 (Win95 era). Win31 used Cue Cards. Instead: Modal dialogs, step-by-step wizards, floating help cards
---
Quick Decision Tree
Is it a window chrome element?
├── Title bar? → SOLID navy (no gradient!)
├── Control button? → SINGLE button (not three)
├── Button? → 3D bevel (white TL, black BR)
├── Input? → Inset bevel (dark TL, white BR)
└── Content area? → White or gray, flat
Is it navigation?
├── Primary nav? → Program Manager groups
├── Section nav? → Menu bar with dropdowns
├── Page nav? → List box or tree control
└── Actions? → Toolbar buttons (beveled)
Is it AI/help?
├── Onboarding? → Setup Wizard (Step X of Y)
├── Inline help? → Cue Cards (floating tips)
├── Questions? → Modal dialog with options
└── Feedback? → Message box with icon
Is it responsive?
├── Mobile? → Single window, modal stack
├── Tablet? → Cascading windows
└── Desktop? → Tiled MDI layout---
CSS Variables Template
:root {
/* Core palette */
--win31-white: #ffffff;
--win31-black: #000000;
--win31-gray: #c0c0c0;
--win31-dark-gray: #808080;
--win31-light-gray: #dfdfdf;
--win31-navy: #000080;
--win31-teal: #008080;
/* Semantic */
--win31-error: #ff0000;
--win31-warning: #ffff00;
--win31-success: #00ff00;
--win31-info: #0000ff;
/* Typography */
--font-win31-ui: 'VT323', 'Courier New', monospace;
--font-win31-pixel: 'Press Start 2P', 'VT323', monospace;
--font-win31-code: 'IBM Plex Mono', 'Courier Prime', monospace;
/* Spacing (4px grid) */
--win31-spacing-xs: 2px;
--win31-spacing-sm: 4px;
--win31-spacing-md: 8px;
--win31-spacing-lg: 16px;
--win31-spacing-xl: 24px;
}---
The Quick Test
If your component has:
- ❌ Any gradient title bars → NOT Win31 (that's Win95)
- ❌ Three window buttons → NOT Win31 (that's Win95)
- ❌ Start menu or taskbar → NOT Win31 (that's Win95)
- ❌ Any neon colors → NOT Win31 (that's vaporwave)
- ❌ Any rounded corners → NOT Win31
- ❌ Any blur effects → NOT Win31
- ❌ Animated assistant character → NOT Win31 (that's Clippy/Win95)
It should have:
- ✅ Solid navy (#000080) title bar
- ✅ Single window control button
- ✅ Program Manager navigation
- ✅ System gray (#c0c0c0) base
- ✅ Beveled borders (white TL, black BR)
- ✅ Sharp corners everywhere
- ✅ Pixel fonts (VT323, Press Start 2P)
- ✅ Hard-edge box shadows only
- ✅ Cue Cards for help (not characters)
---
File Naming Conventions
For authentic Win31 feel:
- All caps:
README.TXT,INSTALL.EXE - 8.3 format:
PROGRAM.EXE,CONFIG.SYS - Extensions matter:
.WRI,.BMP,.INI
---
References
/references/design-system.md- Complete color palette, typography, beveled border patterns/references/component-patterns.md- Full CSS for windows, buttons, forms, panels/references/anti-patterns.md- Vaporwave comparison, decision tree, conversion examples/references/ai-assistant-patterns.md- Cue Card-style AI UX patterns/references/mobile-pocket-computing.md- Responsive Win31 for mobile
---
Pairs With
- windows-95-web-designer - For gradient/taskbar Win95 aesthetic
- vaporwave-glassomorphic-ui-designer - Different retro aesthetic (neons)
- web-design-expert - For brand direction alongside retro style
- design-system-creator - For generating full design token systems
Changelog
All notable changes to the windows-3-1-web-designer skill will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[3.0.0] - 2026-01-31
Added
- Modern Extrapolations - How Win31 would handle 2026 UI needs:
- AI chatbot patterns (Cue Card paradigm, pre-Clippy)
- Mobile responsive (Pocket Computing paradigm)
- Responsive breakpoints (MDI as metaphor)
- Theme variations (Hotdog Stand, Monochrome)
references/ai-assistant-patterns.md- Complete Cue Card-style AI UX:- Modal dialog patterns
- Setup Wizard flows
- Message box styles (info, question, warning, error)
- Terminal chat interface
- Help Index pattern
- Sound effect mappings
references/mobile-pocket-computing.md- Responsive Win31 for mobile:- Program Manager as mobile navigation
- Dialog stack pattern
- Touch adaptations with 44px targets
- Gesture mappings
- Responsive breakpoints
- Menu system for mobile
- Explicit Win31 vs Win95 differentiation table
- 8 anti-patterns with Win95-specific distinctions
- Decision tree covering AI/help patterns
- Quick Test checklist with Win95-specific negatives
- CSS Variables template with spacing scale
Changed
- Expanded SKILL.md from ~150 lines to ~530 lines (matching Win95 skill depth)
- Enhanced description with modern extrapolation keywords
- Updated "When to Use" with AI chatbot and mobile use cases
- Reorganized anti-patterns to emphasize Win95 distinctions
Technical
- Proper NOT clause distinguishing from Win95 skill
- Cross-references to windows-95-web-designer
- Complements Win95 skill with distinct aesthetic
Key Differences from Win95 (Highlighted)
| Feature | Win31 | Win95 |
|---|---|---|
| Title bar | Solid navy | Gradient |
| Window controls | Single button | Three buttons |
| Navigation | Program Manager | Start Menu |
| AI style | Cue Cards, Wizards | Clippy character |
| Mobile | Pocket computing | Pocket PC |
[2.0.0] - 2024-01-XX
Changed
- BREAKING: Restructured from monolithic 539-line file to progressive disclosure architecture
- Reduced SKILL.md from 539 lines to 137 lines (75% reduction)
Added
references/design-system.md- Color palette, beveled borders, typographyreferences/component-patterns.md- Window chrome, buttons, forms, panels CSSreferences/anti-patterns.md- Vaporwave comparison, decision tree, conversion examples- Anti-patterns section with "What it looks like / Why wrong / Instead" format
- Quick Test checklist for Win31 authenticity
Removed
- Inline CSS examples (moved to references)
- Verbose design explanations (condensed to quick reference)
Migration Guide
Reference files are now in /references/ directory. Import patterns:
- Color palette & typography →
references/design-system.md - Component CSS →
references/component-patterns.md - Vaporwave vs Win31 →
references/anti-patterns.md
[1.1.0] - 2025-11-26
Changed
- Updated frontmatter to standard
allowed-toolsformat - Improved description with proper NOT clause and activation keywords
Added
- When to Use This Skill section with clear scope boundaries
- Do NOT use for section with skill alternatives
- MCP Integrations section:
- 21st Century Dev for component scaffolding
- Component Refiner for Win31 styling conversion
- Cross-references to related skills (vaporwave, native-app, web-design)
Fixed
- Removed duplicate "when to use" content
[1.0.0] - 2024-XX-XX
Added
- Initial windows-3-1-web-designer skill
- Comprehensive Win31 color palette (system gray, navy, accents)
- Sacred Rule of Beveled Borders (outset, inset, pressed states)
- Typography system (VT323, Press Start 2P, MS Sans Serif)
- Component patterns:
- Window chrome with titlebar
- 3D push buttons with pressed states
- Form controls (inputs, checkboxes)
- Panels and group boxes
- Anti-patterns: Windows 3.1 vs Vaporwave comparison table
- Decision tree for component design
- Responsive considerations for modern screens
- Vaporwave-to-Win31 conversion example
- Hotdog Stand high-contrast mode
- Quick reference card for all elements
AI Assistant Patterns: The Cue Card Paradigm
How Windows 3.1 would present AI assistants, chatbots, and intelligent agents.
Core Philosophy
Win31 AI is modal, step-by-step, and wizard-driven. This predates Clippy entirely—think Help system Cue Cards, Setup Wizards, and Q&A dialog chains. Every interaction is a focused question with constrained answers.
Key principles: 1. No animated characters - Just clean dialog boxes 2. One question at a time - Modal, focused interactions 3. Constrained choices - Radio buttons, not open text 4. Step indicators - "Step 2 of 5" explicitly shown 5. Cue Card metaphor - Floating help cards that guide
---
The Win31 AI Dialog
Unlike Win95's Clippy, Win31 AI uses stacked modal dialogs:
┌─ AI Assistant ──────────────────────────[─]─┐
│ │
│ ┌────────────────────────────────────────┐ │
│ │ │ │
│ │ What would you like help with? │ │
│ │ │ │
│ │ ○ Writing a document │ │
│ │ ○ Working with files │ │
│ │ ○ Setting up your system │ │
│ │ ○ Learning Windows basics │ │
│ │ │ │
│ └────────────────────────────────────────┘ │
│ │
│ [ OK ] [ Cancel ] [ Help ] │
└──────────────────────────────────────────────┘CSS Implementation
.win31-ai-dialog {
width: 380px;
background: var(--win31-gray);
border: 3px solid var(--win31-black);
box-shadow:
inset 2px 2px 0 var(--win31-white),
inset -2px -2px 0 var(--win31-dark-gray),
4px 4px 0 var(--win31-black);
}
.win31-ai-dialog-titlebar {
background: var(--win31-navy); /* SOLID - no gradient! */
color: var(--win31-white);
padding: 4px 6px;
display: flex;
justify-content: space-between;
align-items: center;
font-family: var(--font-pixel);
font-size: 11px;
font-weight: bold;
}
.win31-ai-dialog-content {
padding: 16px;
background: var(--win31-gray);
}
.win31-ai-question-box {
background: var(--win31-white);
border: 2px solid;
border-color: var(--win31-dark-gray) var(--win31-white)
var(--win31-white) var(--win31-dark-gray);
box-shadow: inset 1px 1px 0 var(--win31-black);
padding: 12px;
margin-bottom: 16px;
}
.win31-ai-option {
display: flex;
align-items: center;
gap: 8px;
padding: 4px 0;
font-family: var(--font-pixel);
font-size: 12px;
}
.win31-ai-buttons {
display: flex;
justify-content: center;
gap: 8px;
padding-top: 8px;
border-top: 2px solid var(--win31-dark-gray);
margin-top: 8px;
}---
Cue Card Pattern
Win31's signature help pattern—floating cards that appear alongside the main window:
┌─ File Manager ───────────────────[─]─┐ ┌─ Cue Cards ────────[×]─┐
│ File Disk Tree View Options │ │ │
├──────────────────────────────────────┤ │ Copying Files │
│ C:\ │ │ ═══════════════ │
│ ├─ DOS │ │ │
│ ├─ WINDOWS │ │ To copy a file: │
│ │ ├─ SYSTEM │ │ │
│ │ └─ ... │ │ 1. Select the file │
│ └─ ... │ │ 2. Hold Ctrl │
│ │ │ 3. Drag to target │
├──────────────────────────────────────┤ │ │
│ Ready │ │ [ < Back ] [ Next > ] │
└──────────────────────────────────────┘ └────────────────────────┘Cue Card CSS
.win31-cue-card {
position: absolute;
width: 220px;
background: var(--win31-gray);
border: 3px solid var(--win31-black);
box-shadow:
inset 2px 2px 0 var(--win31-white),
inset -2px -2px 0 var(--win31-dark-gray),
4px 4px 0 var(--win31-black);
z-index: 100;
}
.win31-cue-card-titlebar {
background: var(--win31-navy);
color: var(--win31-white);
padding: 3px 6px;
font-family: var(--font-pixel);
font-size: 10px;
display: flex;
justify-content: space-between;
}
.win31-cue-card-content {
padding: 12px;
font-family: var(--font-pixel);
font-size: 11px;
line-height: 1.6;
}
.win31-cue-card-title {
font-weight: bold;
border-bottom: 2px solid var(--win31-dark-gray);
padding-bottom: 4px;
margin-bottom: 8px;
}
.win31-cue-card-steps {
padding-left: 16px;
}
.win31-cue-card-nav {
display: flex;
justify-content: space-between;
padding-top: 12px;
border-top: 1px solid var(--win31-dark-gray);
margin-top: 12px;
}---
Setup Wizard Pattern
For multi-step AI interactions (onboarding, configuration, complex tasks):
┌─ Setup Wizard ────────────────────────────────[─]─┐
│ │
│ ┌───────────────────────────────────────────┐ │
│ │ │ │
│ │ ╔════════════════════════════════╗ │ │
│ │ ║ Step 2 of 4 ║ │ │
│ │ ║ ══════════════════════════ ║ │ │
│ │ ║ ║ │ │
│ │ ║ Select your preferred ║ │ │
│ │ ║ assistance style: ║ │ │
│ │ ║ ║ │ │
│ │ ║ ○ Detailed explanations ║ │ │
│ │ ║ ○ Brief suggestions ║ │ │
│ │ ║ ○ Just show me how ║ │ │
│ │ ║ ║ │ │
│ │ ╚════════════════════════════════╝ │ │
│ │ │ │
│ └───────────────────────────────────────────┘ │
│ │
│ [ < Back ] [ Next > ] [ Cancel ] │
└────────────────────────────────────────────────────┘Wizard Step Indicator (Win31 Style)
.win31-wizard-step-indicator {
font-family: var(--font-pixel);
font-size: 11px;
font-weight: bold;
border-bottom: 2px double var(--win31-dark-gray);
padding-bottom: 4px;
margin-bottom: 12px;
}
.win31-wizard-progress {
display: flex;
gap: 4px;
margin-top: 4px;
}
.win31-wizard-progress-segment {
height: 8px;
flex: 1;
background: var(--win31-white);
border: 1px solid var(--win31-dark-gray);
}
.win31-wizard-progress-segment.completed {
background: var(--win31-navy);
}
.win31-wizard-progress-segment.current {
background: var(--win31-teal);
}---
Message Box Patterns
Win31 AI responses using standard message box styles:
Information
┌─ Assistant ─────────────────────────[─]─┐
│ │
│ ╔══╗ │
│ ║ i║ Your document has been saved │
│ ╚══╝ successfully to C:\DOCS │
│ │
│ [ OK ] │
└──────────────────────────────────────────┘Question
┌─ Assistant ─────────────────────────[─]─┐
│ │
│ ╔══╗ Would you like to save │
│ ║? ║ changes to DOCUMENT.TXT │
│ ╚══╝ before closing? │
│ │
│ [ Yes ] [ No ] [ Cancel ] │
└──────────────────────────────────────────┘Warning
┌─ Warning ───────────────────────────[─]─┐
│ │
│ ╔══╗ This operation cannot be │
│ ║ !║ undone. Continue anyway? │
│ ╚══╝ │
│ │
│ [ Continue ] [ Cancel ] │
└──────────────────────────────────────────┘Icon CSS (Pixel Art Style)
.win31-icon-info {
width: 32px;
height: 32px;
background: var(--win31-navy);
color: var(--win31-white);
display: flex;
align-items: center;
justify-content: center;
font-family: serif;
font-size: 20px;
font-weight: bold;
font-style: italic;
border: 2px solid var(--win31-black);
}
.win31-icon-question {
width: 32px;
height: 32px;
background: var(--win31-teal);
color: var(--win31-white);
display: flex;
align-items: center;
justify-content: center;
font-family: serif;
font-size: 22px;
font-weight: bold;
border: 2px solid var(--win31-black);
}
.win31-icon-warning {
width: 32px;
height: 32px;
background: var(--win31-yellow);
color: var(--win31-black);
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-pixel);
font-size: 18px;
font-weight: bold;
border: 2px solid var(--win31-black);
}
.win31-icon-error {
width: 32px;
height: 32px;
background: var(--win31-red);
color: var(--win31-white);
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-pixel);
font-size: 16px;
font-weight: bold;
border: 2px solid var(--win31-black);
}---
Chat Interface (Win31 Terminal Style)
When you need actual chat, style it as a terminal/command prompt:
┌─ AI TERMINAL ─────────────────────────────[─]─┐
│ ┌───────────────────────────────────────────┐ │
│ │C:\>ASSIST │ │
│ │ │ │
│ │ASSISTANT: How can I help you today? │ │
│ │ │ │
│ │C:\>I need help writing a letter │ │
│ │ │ │
│ │ASSISTANT: I can help with that. │ │
│ │What type of letter? │ │
│ │ │ │
│ │ 1. Business letter │ │
│ │ 2. Personal letter │ │
│ │ 3. Formal invitation │ │
│ │ │ │
│ │Enter choice (1-3): _ │ │
│ └───────────────────────────────────────────┘ │
│ Ready │
└───────────────────────────────────────────────┘Terminal Chat CSS
.win31-terminal {
background: var(--win31-black);
color: var(--win31-white);
font-family: var(--font-code);
font-size: 12px;
padding: 8px;
border: 2px solid;
border-color: var(--win31-dark-gray) var(--win31-white)
var(--win31-white) var(--win31-dark-gray);
box-shadow: inset 1px 1px 0 var(--win31-black);
min-height: 200px;
overflow-y: auto;
}
.win31-terminal-line {
margin-bottom: 2px;
white-space: pre-wrap;
word-break: break-word;
}
.win31-terminal-prompt {
color: var(--win31-gray);
}
.win31-terminal-assistant {
color: var(--win31-teal);
}
.win31-terminal-cursor {
display: inline-block;
width: 8px;
height: 12px;
background: var(--win31-white);
animation: win31-blink 0.5s step-end infinite;
}
@keyframes win31-blink {
50% { opacity: 0; }
}---
Help Index Pattern
For AI knowledge base / FAQ interfaces:
┌─ Help Topics ─────────────────────────────[─]─┐
│ File Edit Bookmark Help │
├────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌───────────────────────────┐ │
│ │ Topics: │ │ │ │
│ │ ─────────── │ │ Getting Started │ │
│ │ ○ Overview │ │ ════════════════ │ │
│ │ ○ Getting │ │ │ │
│ │ Started │ │ Welcome to the AI │ │
│ │ ○ Commands │ │ Assistant! This guide │ │
│ │ ○ Examples │ │ will help you learn │ │
│ │ ○ Glossary │ │ the basics. │ │
│ │ │ │ │ │
│ │ │ │ ► First Steps │ │
│ │ │ │ ► Key Concepts │ │
│ │ │ │ ► Common Tasks │ │
│ │ │ │ │ │
│ └──────────────┘ └───────────────────────────┘ │
├────────────────────────────────────────────────┤
│ Press F1 for Help │
└────────────────────────────────────────────────┘---
Key Differences from Win95 AI (Clippy)
| Aspect | Win31 AI | Win95 AI (Clippy) |
|---|---|---|
| Character | None - just dialogs | Animated character |
| Proactivity | User-initiated only | "It looks like you're..." |
| Format | Modal dialogs | Floating balloon |
| Choices | Numbered lists, radio buttons | Clickable suggestions |
| Help style | Cue Cards, indexed | Search-based, contextual |
| Personality | Formal, system-like | Friendly, anthropomorphized |
---
Sound Effects (Optional)
Win31 system sounds to map to AI events:
| Event | Sound File | Description |
|---|---|---|
| Dialog open | CHORD.WAV | Two-note chord |
| Success | TADA.WAV | Fanfare |
| Error | DING.WAV | Alert ding |
| Question | QUESTION.WAV | Rising tone |
| Help open | None | Silent |
const sounds = {
dialog: new Audio('/sounds/chord.wav'),
success: new Audio('/sounds/tada.wav'),
error: new Audio('/sounds/ding.wav'),
};
function playSound(type) {
if (sounds[type]) {
sounds[type].currentTime = 0;
sounds[type].play();
}
}---
Implementation Philosophy
Win31 AI should feel like a knowledgeable colleague from 1992:
- Efficient: No animation delays
- Focused: One thing at a time
- Structured: Clear numbered steps
- Respectful: User initiates, system responds
- Professional: No cutesy characters or humor
The interaction model is closer to a command-line help system wrapped in GUI chrome than a conversational assistant.
Anti-Patterns: Windows 3.1 vs Vaporwave
How to distinguish authentic Win31 from modern retro aesthetics.
What Makes Something Look VAPORWAVE (Avoid These)
| Vaporwave Element | Win31 Alternative |
|---|---|
linear-gradient(135deg, #1a1a2e, #16213e) | background: var(--win31-gray) |
text-shadow: 0 0 10px rgba(0,255,255,0.5) | No text shadow, or 1px 1px 0 var(--win31-dark-gray) |
background: linear-gradient(#00d4ff, #ff00ff) | Solid var(--win31-teal) or var(--win31-navy) |
border: 2px solid #00d4ff | Beveled border pattern |
| Dark backgrounds (#1a1a2e) | System gray (#c0c0c0) |
| Neon cyan (#00d4ff) | Win31 teal (#008080) |
| Glowing/pulsing animations | Static or simple transitions |
| Glassmorphism blur | Solid opaque panels |
| Rounded corners (border-radius) | Sharp 90° corners |
| Drop shadows (box-shadow blur) | Hard-edge bevel shadows |
The Quick Test
If your component has:
- ❌ Any blur effects → NOT Win31
- ❌ Any gradient backgrounds → NOT Win31
- ❌ Any neon colors (#00d4ff, #ff00ff bright) → NOT Win31
- ❌ Any rounded corners → NOT Win31
- ❌ Any glowing text/borders → NOT Win31
- ❌ Dark/black backgrounds → NOT Win31 (except inset content areas)
It should have:
- ✅ System gray (#c0c0c0) base
- ✅ Beveled borders (white top-left, black bottom-right)
- ✅ Sharp corners everywhere
- ✅ Pixel fonts (VT323, Press Start 2P)
- ✅ Navy blue title bars
- ✅ Hard-edge box shadows only
Decision Tree: Designing a Win31 Component
START: What are you building?
│
├─► Window/Dialog
│ ├─► Has title bar? → Navy background, white text, system buttons
│ ├─► Has menu bar? → Gray, beveled, 2px borders
│ ├─► Content area? → Gray background or white inset
│ └─► Status bar? → Gray panels with inset borders
│
├─► Button
│ ├─► Primary action? → .win31-btn-3d--default (extra black border)
│ ├─► Secondary? → .win31-btn-3d (standard)
│ ├─► Titlebar button? → .win31-btn-3d--small
│ └─► Toggle/checked? → Use pressed state permanently
│
├─► Form Control
│ ├─► Text input? → White background, inset border
│ ├─► Dropdown? → White background, inset, with button
│ ├─► Checkbox? → 13x13px, inset, checkmark on select
│ └─► Radio? → Same as checkbox but circular appearance
│
├─► Panel/Section
│ ├─► Contains controls? → Raised panel (outset)
│ ├─► Contains content? → Inset panel
│ └─► Labeled section? → Groupbox with label
│
└─► Decorative Element
├─► Badge/tag? → Gray background, outset, small text
├─► Sticker? → Yellow background, black border, rotated
└─► Icon? → 16x16 or 32x32, pixel art styleExample: Converting Vaporwave to Win31
Before (Vaporwave):
<div style={{
background: 'linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)',
border: '3px solid #00d4ff',
boxShadow: '0 0 20px rgba(0,255,255,0.3)',
}}>
<div style={{
color: '#00d4ff',
textShadow: '0 0 10px rgba(0,255,255,0.5)',
}}>
⚡ Get This Skill
</div>
<button style={{
background: 'linear-gradient(135deg, #00d4ff 0%, #ff00ff 100%)',
border: '2px outset #00d4ff',
}}>
Download
</button>
</div>After (Win31):
<div className="win31-window">
<div className="win31-titlebar">
<span className="win31-title-text">GET SKILL</span>
</div>
<div className="win31-content">
<button className="win31-btn-3d win31-btn-3d--default">
📦 Download Skill Folder
</button>
</div>
</div>File Naming Conventions
For authentic Win31 feel:
- All caps filenames:
README.TXT,INSTALL.EXE,SKILL.DLL - 8.3 format:
PROGRAM.EXE,CONFIG.SYS - Use period sparingly: prefer
SKILLSDAToverSKILLS.DAT
Component Patterns
Complete CSS for all Win31 UI components.
Window Chrome
<div className="win31-window">
{/* Title Bar */}
<div className="win31-titlebar">
<div className="win31-titlebar__left">
<div className="win31-btn-3d win31-btn-3d--small">─</div>
</div>
<span className="win31-title-text">PROGRAM.EXE</span>
<div className="win31-titlebar__right">
<div className="win31-btn-3d win31-btn-3d--small">▲</div>
<div className="win31-btn-3d win31-btn-3d--small">▼</div>
</div>
</div>
{/* Content Area */}
<div className="win31-content">
{/* Your content here */}
</div>
{/* Optional Status Bar */}
<div className="win31-statusbar">
<div className="win31-statusbar-panel">Ready</div>
</div>
</div>.win31-window {
background: var(--win31-gray);
border: 3px solid var(--win31-black);
box-shadow:
inset 2px 2px 0 var(--win31-white),
inset -2px -2px 0 var(--win31-dark-gray);
}
.win31-titlebar {
background: var(--win31-navy);
color: var(--win31-white);
padding: 4px 6px;
display: flex;
justify-content: space-between;
align-items: center;
font-family: var(--font-pixel);
font-size: 12px;
font-weight: bold;
}
.win31-content {
padding: 12px;
background: var(--win31-gray);
}
.win31-statusbar {
display: flex;
gap: 2px;
padding: 2px;
background: var(--win31-gray);
border-top: 2px solid var(--win31-dark-gray);
}
.win31-statusbar-panel {
flex: 1;
padding: 2px 8px;
font-family: var(--font-pixel);
font-size: 11px;
border: 1px solid;
border-color: var(--win31-dark-gray) var(--win31-white) var(--win31-white) var(--win31-dark-gray);
}3D Push Buttons
.win31-btn-3d {
background: var(--win31-gray);
border: none;
padding: 8px 16px;
font-family: var(--font-pixel);
font-size: 12px;
cursor: pointer;
/* The magic bevel */
box-shadow:
inset -2px -2px 0 var(--win31-dark-gray),
inset 2px 2px 0 var(--win31-white),
inset -3px -3px 0 var(--win31-black),
inset 3px 3px 0 var(--win31-light-gray);
}
.win31-btn-3d:hover {
background: var(--win31-light-gray);
}
.win31-btn-3d:active,
.win31-btn-3d--pressed {
box-shadow:
inset 2px 2px 0 var(--win31-dark-gray),
inset -2px -2px 0 var(--win31-white),
inset 3px 3px 0 var(--win31-black),
inset -3px -3px 0 var(--win31-light-gray);
padding: 9px 15px 7px 17px; /* Shift content down-right */
}
/* Default button (highlighted action) */
.win31-btn-3d--default {
border: 2px solid var(--win31-black);
}
/* Small variant for titlebar buttons */
.win31-btn-3d--small {
padding: 2px 6px;
font-size: 10px;
min-width: 20px;
}Form Controls
Text Input
.win31-input {
background: var(--win31-white);
border: 2px solid;
border-color: var(--win31-dark-gray) var(--win31-white) var(--win31-white) var(--win31-dark-gray);
box-shadow: inset 1px 1px 0 var(--win31-black);
padding: 4px 8px;
font-family: var(--font-code);
font-size: 12px;
}
.win31-input:focus {
outline: none;
border-color: var(--win31-navy);
}Checkbox
.win31-checkbox {
appearance: none;
width: 13px;
height: 13px;
background: var(--win31-white);
border: 2px solid;
border-color: var(--win31-dark-gray) var(--win31-white) var(--win31-white) var(--win31-dark-gray);
box-shadow: inset 1px 1px 0 var(--win31-black);
}
.win31-checkbox:checked::after {
content: '✓';
display: block;
font-size: 11px;
font-weight: bold;
text-align: center;
line-height: 11px;
}Panels and Groups
/* Raised panel (toolbar, button group) */
.win31-panel-raised {
background: var(--win31-gray);
border: 2px solid;
border-color: var(--win31-white) var(--win31-black) var(--win31-black) var(--win31-white);
padding: 8px;
}
/* Sunken panel (content area, list) */
.win31-panel-inset {
background: var(--win31-white);
border: 2px solid;
border-color: var(--win31-dark-gray) var(--win31-white) var(--win31-white) var(--win31-dark-gray);
box-shadow: inset 1px 1px 0 var(--win31-black);
padding: 8px;
}
/* Group box (labeled section) */
.win31-groupbox {
border: 2px solid var(--win31-dark-gray);
padding: 16px 12px 12px;
margin-top: 8px;
position: relative;
}
.win31-groupbox__label {
position: absolute;
top: -8px;
left: 12px;
background: var(--win31-gray);
padding: 0 6px;
font-family: var(--font-pixel);
font-size: 11px;
}Responsive Considerations
/* Mobile: Stack windows vertically */
@media (max-width: 768px) {
.win31-window {
width: 100%;
margin-bottom: 16px;
}
.win31-content {
padding: 8px;
}
.win31-titlebar {
font-size: 10px;
}
}
/* Desktop: Allow side-by-side */
@media (min-width: 769px) {
.win31-window-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 16px;
}
}Windows 3.1 Design System
Core colors, typography, and beveled border patterns.
Color Palette
:root {
/* Primary System Colors */
--win31-white: #ffffff;
--win31-black: #000000;
--win31-gray: #c0c0c0; /* THE system gray - most important */
--win31-dark-gray: #808080; /* Shadow/pressed states */
--win31-light-gray: #dfdfdf; /* Highlights */
/* Window Chrome */
--win31-navy: #000080; /* Title bar background */
--win31-title-text: #ffffff; /* Title bar text */
/* Accent Colors (use sparingly) */
--win31-teal: #008080; /* Links, highlights */
--win31-yellow: #ffff00; /* Warnings, featured items */
--win31-lime: #00ff00; /* Success states */
--win31-magenta: #ff00ff; /* Rare accent only */
--win31-red: #ff0000; /* Errors, close buttons */
--win31-blue: #0000ff; /* Selected text background */
}The Sacred Rule of Beveled Borders
Windows 3.1's entire visual language rests on the illusion of depth created by beveled borders.
OUTSET (Raised) Elements
Buttons, toolbars, status bars:
.win31-outset {
border-style: solid;
border-width: 2px;
border-top-color: var(--win31-white);
border-left-color: var(--win31-white);
border-bottom-color: var(--win31-black);
border-right-color: var(--win31-black);
box-shadow:
inset 1px 1px 0 var(--win31-light-gray),
inset -1px -1px 0 var(--win31-dark-gray);
}INSET (Sunken) Elements
Text fields, list boxes, content areas:
.win31-inset {
border-style: solid;
border-width: 2px;
border-top-color: var(--win31-dark-gray);
border-left-color: var(--win31-dark-gray);
border-bottom-color: var(--win31-white);
border-right-color: var(--win31-white);
box-shadow:
inset 1px 1px 0 var(--win31-black),
inset -1px -1px 0 var(--win31-light-gray);
}PRESSED State
Active buttons:
.win31-pressed {
border-top-color: var(--win31-black);
border-left-color: var(--win31-black);
border-bottom-color: var(--win31-white);
border-right-color: var(--win31-white);
box-shadow: inset 1px 1px 0 var(--win31-dark-gray);
}Typography
:root {
/* Primary UI Font - pixel-style */
--font-pixel: 'VT323', 'Courier New', monospace;
/* Headings - chunky pixel font */
--font-pixel-heading: 'Press Start 2P', 'VT323', monospace;
/* Code/Terminal */
--font-code: 'IBM Plex Mono', 'Courier Prime', 'Courier New', monospace;
/* System UI (fallback) */
--font-system: 'MS Sans Serif', 'Arial', sans-serif;
}
/* Sizing Guidelines */
.win31-text-tiny { font-size: 8px; letter-spacing: 1px; }
.win31-text-small { font-size: 10px; letter-spacing: 1px; }
.win31-text-body { font-size: 12px; letter-spacing: 0.5px; }
.win31-text-large { font-size: 14px; }
.win31-text-title { font-size: 11px; letter-spacing: 2px; text-transform: uppercase; }Quick Reference Card
| Element | Background | Border Pattern | Shadow |
|---|---|---|---|
| Window | #c0c0c0 | 3px solid black | inset white/dark-gray |
| Titlebar | #000080 | none | none |
| Button (up) | #c0c0c0 | none | inset white TL, black BR |
| Button (down) | #c0c0c0 | none | inset black TL, white BR |
| Input | #ffffff | inset 2px | inset 1px black |
| Panel (raised) | #c0c0c0 | outset 2px | none |
| Panel (inset) | #ffffff | inset 2px | inset 1px black |
| Statusbar | #c0c0c0 | inset 1px per panel | none |
Hotdog Stand Mode
The infamous high-contrast color scheme. Use only for easter eggs or accessibility:
.hotdog-stand {
--win31-gray: #ff0000;
--win31-dark-gray: #800000;
--win31-light-gray: #ff8080;
--win31-navy: #ffff00;
--win31-title-text: #ff0000;
}Mobile: The Pocket Computing Paradigm
How to make Windows 3.1 responsive for modern mobile devices.
Core Philosophy
Win31 on mobile isn't about shrinking Program Manager—it's reimagining the pocket organizer with Win31 chrome. The paradigm is "desktop in your pocket" at its most primitive: single-window focus, modal everything, and explicit navigation.
Key principles: 1. One window at a time - No multitasking visible 2. Program Manager is home - Icon grid, explicit program selection 3. Modal dialogs stack - Everything is a focused interaction 4. No taskbar - Use explicit "switch to" or "close" 5. System info at top - Battery, time in title bar area
---
Layout Architecture
Mobile Viewport (< 640px)
┌────────────────────────────┐
│ ■ Program Manager ─ 10:45 │ ← Title bar with time
├────────────────────────────┤
│ │
│ ╔════════════════════╗ │
│ ║ Main ║ │
│ ╠════════════════════╣ │
│ ║ ║ │
│ ║ ┌───┐ ┌───┐ ║ │
│ ║ │📁│ │📝│ ║ │ ← Program group (icon grid)
│ ║ │Mgr│ │Wrt│ ║ │
│ ║ └───┘ └───┘ ║ │
│ ║ ║ │
│ ║ ┌───┐ ┌───┐ ║ │
│ ║ │🎨│ │💾│ ║ │
│ ║ │Pnt│ │Dsk│ ║ │
│ ║ └───┘ └───┘ ║ │
│ ║ ║ │
│ ╚════════════════════╝ │
│ │
├────────────────────────────┤
│ [ Window ] [ Help ] │ ← Menu bar at bottom
└────────────────────────────┘CSS Grid Implementation
.win31-mobile-layout {
display: grid;
grid-template-rows: 24px 1fr 28px;
height: 100vh;
height: 100dvh; /* Dynamic viewport for mobile */
background: var(--win31-teal); /* Desktop background */
}
.win31-mobile-titlebar {
background: var(--win31-navy);
color: var(--win31-white);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 8px;
font-family: var(--font-pixel);
font-size: 10px;
border-bottom: 2px solid var(--win31-black);
}
.win31-mobile-main {
padding: 8px;
overflow-y: auto;
}
.win31-mobile-menubar {
background: var(--win31-gray);
border-top: 2px solid var(--win31-white);
display: flex;
align-items: center;
padding: 2px 4px;
gap: 2px;
}---
Program Manager (Mobile)
The heart of Win31 mobile—a single program group fills the screen:
┌────────────────────────────┐
│ ■ Accessories ────── 10:45 │
├────────────────────────────┤
│ ╔════════════════════════╗ │
│ ║ ║ │
│ ║ ┌────┐ ┌────┐ ║ │
│ ║ │ 📝 │ │ 🎨 │ ║ │
│ ║ │Note│ │Pnt │ ║ │
│ ║ │ pad│ │brsh│ ║ │
│ ║ └────┘ └────┘ ║ │
│ ║ ║ │
│ ║ ┌────┐ ┌────┐ ║ │
│ ║ │ ✍️ │ │ 🖩 │ ║ │
│ ║ │Writ│ │Calc│ ║ │
│ ║ │ e │ │ │ ║ │
│ ║ └────┘ └────┘ ║ │
│ ║ ║ │
│ ║ ┌────┐ ┌────┐ ║ │
│ ║ │ 🃏 │ │ 📞 │ ║ │
│ ║ │Card│ │Card│ ║ │
│ ║ │file│ │file│ ║ │
│ ║ └────┘ └────┘ ║ │
│ ║ ║ │
│ ╚════════════════════════╝ │
├────────────────────────────┤
│ [File] [Options] [Window] ▲│
└────────────────────────────┘Program Group Implementation
.win31-program-group-mobile {
background: var(--win31-gray);
border: 3px solid var(--win31-black);
box-shadow:
inset 2px 2px 0 var(--win31-white),
inset -2px -2px 0 var(--win31-dark-gray);
margin: 4px;
}
.win31-program-group-titlebar {
background: var(--win31-navy);
color: var(--win31-white);
padding: 2px 6px;
font-family: var(--font-pixel);
font-size: 10px;
font-weight: bold;
}
.win31-program-icons-mobile {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
padding: 16px;
justify-items: center;
}
.win31-program-icon {
width: 64px;
text-align: center;
cursor: pointer;
}
.win31-program-icon img {
width: 32px;
height: 32px;
image-rendering: pixelated;
border: 1px solid transparent;
}
.win31-program-icon:active img {
border: 1px dotted var(--win31-navy);
}
.win31-program-icon span {
display: block;
font-family: var(--font-pixel);
font-size: 10px;
margin-top: 4px;
word-break: break-word;
}---
Application Windows on Mobile
When a program opens, it takes over the full screen:
┌────────────────────────────┐
│ ■ Write - LETTER.WRI ─ [─] │
├────────────────────────────┤
│ File Edit Find Character ▼ │
├────────────────────────────┤
│ ┌────────────────────────┐ │
│ │Dear Sir, │ │
│ │ │ │
│ │I am writing to... │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ └────────────────────────┘ │
├────────────────────────────┤
│ Page 1 Ln 1 Col 1 │
└────────────────────────────┘Full-Screen Window CSS
.win31-window-mobile {
position: fixed;
inset: 0;
background: var(--win31-gray);
display: flex;
flex-direction: column;
z-index: 100;
}
.win31-window-mobile-titlebar {
background: var(--win31-navy);
color: var(--win31-white);
padding: 4px 6px;
display: flex;
align-items: center;
justify-content: space-between;
font-family: var(--font-pixel);
font-size: 10px;
font-weight: bold;
min-height: 22px;
}
.win31-window-mobile-menubar {
background: var(--win31-gray);
border-bottom: 2px solid var(--win31-dark-gray);
padding: 2px;
display: flex;
gap: 2px;
flex-wrap: wrap;
}
.win31-window-mobile-content {
flex: 1;
overflow-y: auto;
padding: 2px;
}
.win31-window-mobile-statusbar {
background: var(--win31-gray);
border-top: 2px solid var(--win31-white);
padding: 2px 8px;
font-family: var(--font-pixel);
font-size: 10px;
display: flex;
justify-content: space-between;
}---
Dialog Stack Pattern
Dialogs stack on mobile—tap outside to dismiss or use explicit close:
┌────────────────────────────┐
│ ■ Write - LETTER.WRI ─ │ ← Main app (dimmed)
├────────────────────────────┤
│ │
│ ┌── Save As ────────[×]┐ │ ← Dialog on top
│ │ │ │
│ │ File Name: │ │
│ │ ┌───────────────────┐ │ │
│ │ │LETTER.WRI │ │ │
│ │ └───────────────────┘ │ │
│ │ │ │
│ │ Directory: C:\DOCS │ │
│ │ │ │
│ │ [ OK ] [ Cancel ] │ │
│ └───────────────────────┘ │
│ │
└────────────────────────────┘Dialog Stack CSS
.win31-dialog-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.3);
display: flex;
align-items: center;
justify-content: center;
z-index: 200;
}
.win31-dialog-mobile {
width: calc(100% - 32px);
max-width: 320px;
max-height: 80vh;
background: var(--win31-gray);
border: 3px solid var(--win31-black);
box-shadow:
inset 2px 2px 0 var(--win31-white),
inset -2px -2px 0 var(--win31-dark-gray),
4px 4px 0 var(--win31-black);
overflow: hidden;
}
.win31-dialog-mobile-titlebar {
background: var(--win31-navy);
color: var(--win31-white);
padding: 3px 6px;
display: flex;
justify-content: space-between;
align-items: center;
font-family: var(--font-pixel);
font-size: 10px;
}
.win31-dialog-mobile-content {
padding: 12px;
max-height: calc(80vh - 100px);
overflow-y: auto;
}
.win31-dialog-mobile-buttons {
display: flex;
justify-content: center;
gap: 8px;
padding: 8px 12px 12px;
border-top: 2px solid var(--win31-dark-gray);
}---
Touch Adaptations
Larger Touch Targets
/* Minimum 44px touch targets (Apple HIG) */
.win31-touch-target {
min-height: 44px;
min-width: 44px;
}
/* Program icons on mobile */
.win31-program-icon-mobile {
width: 72px;
text-align: center;
padding: 8px;
}
.win31-program-icon-mobile img {
width: 40px;
height: 40px;
}
/* Menu items need more padding */
.win31-menu-item-mobile {
padding: 10px 16px;
font-size: 13px;
border-bottom: 1px solid var(--win31-dark-gray);
}
/* Buttons need more height */
.win31-btn-3d-mobile {
min-height: 36px;
padding: 8px 20px;
}Gestures Mapped to Win31 Actions
| Gesture | Win31 Equivalent | Action |
|---|---|---|
| Tap | Click | Select/Open |
| Long press | N/A (no right-click in Win31) | Show context help |
| Swipe left | Close window | Return to Program Manager |
| Swipe down | Minimize | Minimize to icon |
| Pinch | N/A | Not supported |
// Swipe left to close window
let startX = 0;
document.addEventListener('touchstart', (e) => {
startX = e.touches[0].clientX;
});
document.addEventListener('touchend', (e) => {
const endX = e.changedTouches[0].clientX;
const diff = startX - endX;
if (diff > 100) {
closeActiveWindow();
}
});---
Responsive Breakpoints
| Breakpoint | Metaphor | Layout Changes |
|---|---|---|
| < 400px | Pocket organizer | Single column icons, minimal chrome |
| 400-640px | Small PDA | 2-column icons, full menu bar |
| 640-1024px | Tablet/laptop | 3-4 column icons, cascading windows possible |
| > 1024px | Desktop | Full Win31 experience |
/* Pocket organizer */
@media (max-width: 399px) {
.win31-program-icons-mobile {
grid-template-columns: 1fr;
}
.win31-menu-item {
padding: 2px 4px;
font-size: 9px;
}
}
/* Small PDA */
@media (min-width: 400px) and (max-width: 639px) {
.win31-program-icons-mobile {
grid-template-columns: repeat(2, 1fr);
}
}
/* Tablet */
@media (min-width: 640px) and (max-width: 1023px) {
.win31-program-icons-mobile {
grid-template-columns: repeat(3, 1fr);
}
/* Allow side-by-side windows */
.win31-window-mobile {
position: relative;
max-width: 50%;
}
}
/* Desktop */
@media (min-width: 1024px) {
/* Switch to full desktop layout */
.win31-mobile-layout {
display: none;
}
.win31-desktop-layout {
display: block;
}
}---
Menu System (Mobile)
Menus drop down as full-width panels:
┌────────────────────────────┐
│ ■ File Manager ────── 10:45│
├────────────────────────────┤
│ ▼ File │ ← Menu expanded
│ ┌────────────────────────┐ │
│ │ Open │ │
│ │ Move... │ │
│ │ Copy... │ │
│ │ Delete │ │
│ │ Rename... │ │
│ │ ───────────────────── │ │
│ │ Properties... │ │
│ │ ───────────────────── │ │
│ │ Exit │ │
│ └────────────────────────┘ │
│ │
└────────────────────────────┘Mobile Menu CSS
.win31-menu-mobile {
position: absolute;
left: 0;
right: 0;
background: var(--win31-gray);
border: 2px solid;
border-color: var(--win31-white) var(--win31-black)
var(--win31-black) var(--win31-white);
z-index: 150;
max-height: 60vh;
overflow-y: auto;
}
.win31-menu-item-mobile {
padding: 12px 16px;
font-family: var(--font-pixel);
font-size: 12px;
border-bottom: 1px solid var(--win31-light-gray);
touch-action: manipulation;
}
.win31-menu-item-mobile:active {
background: var(--win31-navy);
color: var(--win31-white);
}
.win31-menu-separator {
height: 2px;
background: var(--win31-dark-gray);
margin: 4px 8px;
}---
Status Indicators
System status shown in title bar area:
.win31-mobile-status {
display: flex;
align-items: center;
gap: 8px;
font-family: var(--font-pixel);
font-size: 9px;
}
.win31-mobile-battery {
display: flex;
align-items: center;
gap: 2px;
}
.win31-mobile-battery-icon {
width: 16px;
height: 10px;
border: 1px solid var(--win31-white);
position: relative;
}
.win31-mobile-battery-icon::after {
content: '';
position: absolute;
right: -3px;
top: 2px;
width: 2px;
height: 6px;
background: var(--win31-white);
}
.win31-mobile-battery-level {
position: absolute;
left: 1px;
top: 1px;
bottom: 1px;
background: var(--win31-lime);
/* Width set via inline style based on level */
}---
Performance Considerations
1. No animations - Win31 was instantaneous 2. Minimal shadows - Only hard-edge bevels 3. System fonts first - Pixel fonts load later 4. Single-window focus - Only render active window 5. Lazy load groups - Only load icons when group opens
@media (prefers-reduced-motion: reduce) {
/* Win31 already has no motion, but ensure it */
* {
transition: none !important;
animation: none !important;
}
}
/* Optimize for touch scrolling */
.win31-scrollable-mobile {
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}---
Key Differences from Win95 Mobile
| Aspect | Win31 Mobile | Win95 Mobile |
|---|---|---|
| Navigation | Program Manager | Start Menu + Taskbar |
| Multitasking | Hidden (manual switch) | Visible in taskbar |
| Window controls | Single menu button | Three buttons (−□×) |
| Status bar | Per-window | System-wide taskbar |
| Background | Teal desktop | Customizable |
| Icon style | 32x32 flat | 32x32 with shadows |
Win31 mobile feels more like a dedicated pocket organizer than a "shrunken desktop."