
Windows 95 Web Designer
- 106 installs
- 178 repo stars
- Updated July 14, 2026
- erichowens/some_claude_skills
Build modern web applications with authentic Windows 95 aesthetic and Start Menu paradigm.
About
Extrapolates Win95 design to 2026 contexts: AI chatbots as Clippy descendants, mobile as pocket PCs, responsive as multi-monitor. Covers title bar gradients, taskbar patterns, and 3D beveled chrome.
- Win95 title bar gradient (dark blue #000080 to light #1084d0)
- Three distinct window control buttons (minimize, maximize, close)
Windows 95 Web Designer by the numbers
- 106 all-time installs (skills.sh)
- Ranked #1,101 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-95-web-designerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 106 |
|---|---|
| repo stars | ★ 178 |
| Last updated | July 14, 2026 |
| Repository | erichowens/some_claude_skills ↗ |
What it does
Build modern web applications with authentic Windows 95 aesthetic and Start Menu paradigm.
Files
Windows 95 Web Designer
Creates modern 2026 web applications with authentic Windows 95 aesthetic. Not recreating 1995—extrapolating Win95 to modern contexts: AI assistants as Clippy descendants, mobile as pocket PCs, responsive as multi-monitor.
When to Use
Use for:
- Web apps with Win95 authenticity (windags.ai, retro dashboards)
- AI chatbot interfaces (Clippy-style assistants, wizard dialogs)
- Mobile-responsive Win95 UIs (pocket PC paradigm)
- Start menu navigation patterns
- Taskbar-based layouts
- Desktop icon grids
- Win95 Plus! theme variations
Do NOT use for:
- Windows 3.1 aesthetic → use windows-3-1-web-designer (flatter, Program Manager style)
- Vaporwave/synthwave → use vaporwave-glassomorphic-ui-designer (neons, gradients)
- macOS/iOS styling → use native-app-designer
- Flat/Material design → use web-design-expert
Win95 vs Win31: 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/System | MS Sans Serif, Tahoma |
| Icons | 32×32 flat | 32×32 with drop shadow |
| Depth | Bevels only | Bevels + subtle gradients |
---
Core Design System
Color Palette
| Color | Hex | CSS Variable | Usage |
|---|---|---|---|
| Desktop Teal | #008080 | --win95-desktop | Desktop background |
| System Gray | #c0c0c0 | --win95-gray | Window chrome, buttons |
| Title Blue (Dark) | #000080 | --win95-title-dark | Title gradient start |
| Title Blue (Light) | #1084d0 | --win95-title-light | Title gradient end |
| Button Face | #dfdfdf | --win95-button-face | Button surface |
| Button Highlight | #ffffff | --win95-highlight | Top/left bevels |
| Button Shadow | #808080 | --win95-shadow | Bottom/right bevels |
| Button Dark Shadow | #000000 | --win95-dark-shadow | Outer shadow edge |
| Window Background | #ffffff | --win95-window-bg | Content areas |
| Selection Blue | #000080 | --win95-selection | Selected items |
| Selection Text | #ffffff | --win95-selection-text | Text on selection |
The Win95 Title Bar Gradient
THE signature Win95 element - horizontal gradient from dark to light blue:
.win95-titlebar {
background: linear-gradient(90deg, #000080 0%, #1084d0 100%);
color: white;
font-family: 'Tahoma', 'MS Sans Serif', sans-serif;
font-weight: bold;
font-size: 11px;
padding: 3px 4px;
display: flex;
align-items: center;
justify-content: space-between;
}
.win95-titlebar-inactive {
background: linear-gradient(90deg, #808080 0%, #b5b5b5 100%);
}Window Control Buttons
Win95 has THREE distinct buttons (not Win31's single menu):
.win95-controls {
display: flex;
gap: 2px;
}
.win95-control-btn {
width: 16px;
height: 14px;
background: var(--win95-gray);
border: none;
font-size: 9px;
font-family: 'Marlett', sans-serif; /* Win95 symbol font */
/* 3D bevel */
box-shadow:
inset -1px -1px 0 var(--win95-dark-shadow),
inset 1px 1px 0 var(--win95-highlight),
inset -2px -2px 0 var(--win95-shadow),
inset 2px 2px 0 var(--win95-button-face);
}
.win95-control-btn:active {
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight);
}Typography
| Use | Font | Fallback | Size |
|---|---|---|---|
| UI Labels | Tahoma | MS Sans Serif, Arial | 11px |
| Title bars | Tahoma Bold | Arial Bold | 11px |
| Menus | Tahoma | Arial | 11px |
| Code | Fixedsys | Courier New | 12px |
| Pixel headings | MS Sans Serif | VT323 (web) | 12-14px |
Web-safe approximations:
:root {
--font-win95-ui: 'Tahoma', 'Segoe UI', 'Arial', sans-serif;
--font-win95-mono: 'Fixedsys Excelsior', 'Courier New', monospace;
--font-win95-pixel: 'VT323', 'Courier New', monospace;
}---
Modern Extrapolations
AI Chatbots: The Clippy Paradigm
Win95 would present AI as a helpful assistant character in a wizard dialog:
┌─ AI Assistant ──────────────────────────[−][□][×]─┐
│ ┌────────────────────────────────────────────────┐│
│ │ ┌─────┐ ││
│ │ │ 📎 │ "It looks like you're writing a ││
│ │ │ │ letter. Would you like help?" ││
│ │ └─────┘ ││
│ │ ││
│ │ ○ Get help with writing ││
│ │ ○ Just type without help ││
│ │ ○ Don't show this tip again ││
│ │ ││
│ └────────────────────────────────────────────────┘│
│ [ OK ] [ Cancel ] │
└──────────────────────────────────────────────────┘Key patterns:
- Character avatar (not just chat bubbles)
- Radio button choices (not freeform)
- Wizard step indicators
- "Tip of the Day" styling
- Yellow notepad backgrounds for suggestions
Mobile: The Pocket PC Paradigm
Win95 on mobile extrapolates to pocket-sized desktop:
┌────────────────────────┐
│ Start │ 📶 🔋 3:45 PM │ ← Status bar as taskbar
├────────────────────────┤
│ ┌──────┐ ┌──────┐ │
│ │ 📁 │ │ 🌐 │ │ ← Desktop icon grid
│ │Files │ │Browse│ │
│ └──────┘ └──────┘ │
│ ┌──────┐ ┌──────┐ │
│ │ 💬 │ │ ⚙️ │ │
│ │Chat │ │Setup │ │
│ └──────┘ └──────┘ │
├────────────────────────┤
│ [Start] [📧2] [💬] [📁]│ ← Taskbar with open apps
└────────────────────────┘Key patterns:
- Start button in bottom-left (hamburger is NOT Win95)
- Taskbar shows open apps as buttons
- Desktop is icon grid (not app drawer)
- Status bar mimics system tray
- Swipe up = Start menu (not gestures)
Responsive: Multi-Monitor as Breakpoints
Win95 mentally modeled multiple displays. Apply this:
| Breakpoint | Win95 Metaphor | Layout |
|---|---|---|
| Mobile (<640px) | Pocket PC | Single window, taskbar bottom |
| Tablet (640-1024px) | Laptop | Cascading windows, taskbar |
| Desktop (>1024px) | Full desktop | Multiple windows, desktop icons |
Dark Mode: Plus! Themes
Windows 95 Plus! had theme packs. Dark mode extrapolation:
/* Plus! "Mystery" theme (dark) */
[data-theme="dark"] {
--win95-desktop: #1a1a2e;
--win95-gray: #3d3d5c;
--win95-title-dark: #16213e;
--win95-title-light: #1a1a4e;
--win95-button-face: #4a4a6a;
--win95-highlight: #5a5a7a;
--win95-shadow: #2a2a4a;
--win95-window-bg: #2d2d4d;
}
/* Plus! "Golden Era" theme */
[data-theme="golden"] {
--win95-title-dark: #8b4513;
--win95-title-light: #daa520;
--win95-desktop: #2e1a0d;
}---
Component Patterns
Start Menu
.win95-start-menu {
position: fixed;
bottom: 28px; /* Above taskbar */
left: 0;
width: 200px;
background: var(--win95-gray);
border: 2px solid;
border-color: var(--win95-highlight) var(--win95-dark-shadow)
var(--win95-dark-shadow) var(--win95-highlight);
box-shadow: 2px 2px 0 var(--win95-dark-shadow);
}
.win95-start-menu-sidebar {
width: 24px;
background: linear-gradient(0deg, #000080 0%, #1084d0 100%);
writing-mode: vertical-rl;
text-orientation: mixed;
transform: rotate(180deg);
color: white;
font-weight: bold;
padding: 4px;
}
.win95-start-menu-item {
display: flex;
align-items: center;
gap: 8px;
padding: 4px 8px;
cursor: pointer;
}
.win95-start-menu-item:hover {
background: var(--win95-selection);
color: var(--win95-selection-text);
}Taskbar
.win95-taskbar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 28px;
background: var(--win95-gray);
border-top: 2px solid var(--win95-highlight);
display: flex;
align-items: center;
padding: 2px 4px;
gap: 4px;
}
.win95-start-button {
display: flex;
align-items: center;
gap: 4px;
padding: 2px 6px;
font-weight: bold;
font-size: 11px;
/* 3D button styling */
}
.win95-taskbar-button {
min-width: 140px;
max-width: 160px;
height: 22px;
font-size: 11px;
text-align: left;
padding: 0 8px;
/* Pressed = active window */
}
.win95-system-tray {
margin-left: auto;
display: flex;
align-items: center;
gap: 8px;
border-left: 2px solid var(--win95-shadow);
padding-left: 8px;
}Dialog Boxes (for AI)
.win95-dialog {
min-width: 340px;
background: var(--win95-gray);
border: 2px solid;
border-color: var(--win95-highlight) var(--win95-dark-shadow)
var(--win95-dark-shadow) var(--win95-highlight);
}
.win95-dialog-content {
padding: 16px;
display: flex;
gap: 16px;
}
.win95-dialog-icon {
width: 32px;
height: 32px;
flex-shrink: 0;
}
.win95-dialog-buttons {
display: flex;
justify-content: flex-end;
gap: 8px;
padding: 8px 16px 16px;
}
.win95-button-primary {
min-width: 75px;
padding: 4px 12px;
/* Add dotted focus ring for default button */
outline: 1px dotted var(--win95-dark-shadow);
outline-offset: -4px;
}---
Anti-Patterns
Anti-Pattern: Hamburger Menus
Novice thinking: "Three lines for mobile navigation" Reality: Win95 never had hamburgers—it has the Start button Instead: Use Start menu pattern with labeled button
Anti-Pattern: Floating Action Buttons
Novice thinking: "FAB for primary action" Reality: Win95 actions are in toolbars and menus Instead: Toolbar buttons or context menus
Anti-Pattern: Card-Based Layouts
Novice thinking: "Cards with rounded corners and shadows" Reality: Win95 uses windows and list views Instead: List View, Details View, or Tiled Icons
Anti-Pattern: Gradient Backgrounds Everywhere
Novice thinking: "Win95 has gradients so I'll use them on everything" Reality: ONLY title bars have gradients. Everything else is solid. Instead: Gradient only on active title bars; solid colors elsewhere
Anti-Pattern: Soft Shadows
Novice thinking: box-shadow: 0 4px 6px rgba(0,0,0,0.1) Reality: Win95 has HARD pixel shadows only Instead: box-shadow: 2px 2px 0 #000000 (no blur)
---
Quick Decision Tree
Is it a window chrome element?
├── Title bar? → Gradient (dark→light blue)
├── 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? → Start Menu pattern
├── Section nav? → Tab control
├── Page nav? → Tree view or list
└── Actions? → Toolbar buttons
Is it a notification?
├── Important? → Modal dialog with icon
├── Informational? → Balloon tooltip (system tray)
├── Progress? → Progress bar in status bar
└── Success? → Sound + brief dialog---
CSS Variables Template
:root {
/* Core palette */
--win95-desktop: #008080;
--win95-gray: #c0c0c0;
--win95-title-dark: #000080;
--win95-title-light: #1084d0;
--win95-button-face: #dfdfdf;
--win95-highlight: #ffffff;
--win95-shadow: #808080;
--win95-dark-shadow: #000000;
--win95-window-bg: #ffffff;
--win95-selection: #000080;
--win95-selection-text: #ffffff;
/* Semantic */
--win95-error: #ff0000;
--win95-warning: #ffff00;
--win95-success: #00ff00;
--win95-info: #0000ff;
/* Typography */
--font-win95-ui: 'Tahoma', 'Segoe UI', 'Arial', sans-serif;
--font-win95-mono: 'Fixedsys Excelsior', 'Courier New', monospace;
/* Spacing (4px grid) */
--win95-spacing-xs: 2px;
--win95-spacing-sm: 4px;
--win95-spacing-md: 8px;
--win95-spacing-lg: 16px;
--win95-spacing-xl: 24px;
}---
References
/references/component-library.md- Full CSS for all Win95 components/references/ai-assistant-patterns.md- Clippy-style AI UX patterns/references/mobile-pocket-pc.md- Responsive Win95 for mobile/references/plus-themes.md- Dark mode and theme variations/references/icon-system.md- Win95 icon design and sizing
---
Pairs With
- windows-3-1-web-designer - For older, flatter Win31 aesthetic
- web-design-expert - For brand direction alongside retro style
- design-system-creator - For generating full design token systems
- frontend-architect - For Cloudflare deployment of Win95 apps
Changelog
All notable changes to the windows-95-web-designer skill.
[1.0.0] - 2026-01-31
Added
- Initial release of windows-95-web-designer skill
- Core design system with authentic Win95 color palette
- Gradient title bar pattern (THE signature Win95 element)
- Three-button window controls (minimize, maximize/restore, close)
- Start menu and taskbar patterns
- Modern extrapolations:
- AI chatbot interfaces (Clippy paradigm)
- Mobile responsive (Pocket PC paradigm)
- Dark mode (Plus! themes)
- Anti-patterns section distinguishing from Win31 and vaporwave
- Reference documentation:
component-library.md- Full CSS for all Win95 componentsai-assistant-patterns.md- Clippy-style AI UX patternsmobile-pocket-pc.md- Responsive Win95 for mobile- Decision tree for quick component selection
Technical
- Proper NOT clause to avoid Win31 false activation
- Under 500 lines in SKILL.md (progressive disclosure)
- Complements windows-3-1-web-designer with distinct aesthetic
Differences from Win31 Skill
| Feature | Win31 | Win95 |
|---|---|---|
| Title bar | Solid navy | Gradient (dark→light) |
| Window controls | Single button | Three buttons |
| Navigation | Program Manager | Start Menu + Taskbar |
| Fonts | Bitmap | Tahoma/MS Sans Serif |
AI Assistant Patterns: The Clippy Paradigm
How Windows 95 would present AI assistants, chatbots, and intelligent agents.
Core Philosophy
Win95 AI is proactive, character-based, and wizard-driven. Not the modern chat paradigm—but the Office Assistant paradigm extended.
Key principles: 1. Character avatar - Not faceless chat bubbles 2. Proactive suggestions - "It looks like you're..." 3. Wizard flows - Step-by-step, not freeform 4. Constrained choices - Radio buttons, not open text 5. Dismissable tips - "Don't show me this again"
---
The AI Assistant Window
┌─ Assistant ─────────────────────────────[−][□][×]─┐
│ ┌────────────────────────────────────────────────┐│
│ │ ││
│ │ ┌─────────────────┐ ││
│ │ │ │ ││
│ │ │ [Character] │ Message text goes here ││
│ │ │ Animation │ with helpful suggestions ││
│ │ │ │ and guidance. ││
│ │ └─────────────────┘ ││
│ │ ││
│ │ ○ Option one - Description of this choice ││
│ │ ○ Option two - Description of this choice ││
│ │ ○ Don't show me this tip again ││
│ │ ││
│ └────────────────────────────────────────────────┘│
│ □ Always show tips on startup [ OK ] [Cancel] │
└──────────────────────────────────────────────────┘CSS Implementation
.win95-assistant {
width: 420px;
background: var(--win95-gray);
border: 2px solid;
border-color: var(--win95-highlight) var(--win95-dark-shadow)
var(--win95-dark-shadow) var(--win95-highlight);
box-shadow: 4px 4px 0 var(--win95-dark-shadow);
}
.win95-assistant-content {
display: flex;
gap: 16px;
padding: 16px;
background: #ffffcc; /* Yellow tip background */
margin: 8px;
border: 1px solid var(--win95-shadow);
}
.win95-assistant-avatar {
width: 64px;
height: 64px;
flex-shrink: 0;
/* Animated character goes here */
}
.win95-assistant-message {
flex: 1;
font-size: 11px;
line-height: 1.4;
}
.win95-assistant-options {
margin-top: 12px;
display: flex;
flex-direction: column;
gap: 8px;
}
.win95-assistant-option {
display: flex;
align-items: flex-start;
gap: 8px;
}
.win95-assistant-option input[type="radio"] {
margin-top: 2px;
}---
Tip of the Day Pattern
For startup tips, daily suggestions, or onboarding:
┌─ Tip of the Day ─────────────────────────────[×]─┐
│ │
│ ┌───────────────────────────────────────────┐ │
│ │ 💡 │ │
│ │ │ │
│ │ Did you know? │ │
│ │ │ │
│ │ You can press F1 at any time to get │ │
│ │ help with the current task. │ │
│ │ │ │
│ └───────────────────────────────────────────┘ │
│ │
│ □ Show tips at startup │
│ │
│ [Previous] [Next] [Close] │
└───────────────────────────────────────────────────┘---
Wizard Flow Pattern
For multi-step AI interactions (setup, configuration, complex tasks):
┌─ Setup Wizard ───────────────────────────────[×]─┐
│ │
│ ┌───┐ │
│ │ 🔮│ Step 2 of 4: Choose Your Assistant │
│ └───┘ │
│ ────────────────────────────────────────────── │
│ │
│ Select the assistant personality that best │
│ matches your work style: │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ ○ 📎 Clippy - Helpful and proactive │ │
│ │ ○ 🐕 Rover - Searches for answers │ │
│ │ ○ 🧙 Merlin - Magical assistance │ │
│ │ ○ 🤖 Bot - Direct and efficient │ │
│ └──────────────────────────────────────────┘ │
│ │
│ ═══════════════════════════════════════════════ │
│ [< Back] [Next >] [Cancel] │
└───────────────────────────────────────────────────┘Wizard Progress Indicator
.win95-wizard-steps {
display: flex;
justify-content: center;
gap: 4px;
margin-bottom: 16px;
}
.win95-wizard-step {
width: 12px;
height: 12px;
background: var(--win95-gray);
border: 1px solid var(--win95-shadow);
}
.win95-wizard-step.active {
background: var(--win95-title-dark);
}
.win95-wizard-step.completed {
background: var(--win95-selection);
}---
Chat Interface (Win95 Style)
When you need actual chat, style it as a "Message Center" window:
┌─ Message Center ─────────────────────────[−][□][×]─┐
│ File Edit View Help │
├─────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────┐ │
│ │ From: Assistant 10:45 AM │ │
│ │ ───────────────────────────────────────────── │ │
│ │ Hello! How can I help you today? │ │
│ │ │ │
│ │ From: You 10:46 AM │ │
│ │ ───────────────────────────────────────────── │ │
│ │ Can you help me write a letter? │ │
│ │ │ │
│ │ From: Assistant 10:46 AM │ │
│ │ ───────────────────────────────────────────── │ │
│ │ Of course! I'd be happy to help. │ │
│ │ │ │
│ │ Would you like to: │ │
│ │ • Start a new letter from scratch │ │
│ │ • Use a template │ │
│ │ • Open a recent letter │ │
│ │ │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Type your message here... │ │
│ └─────────────────────────────────────────────────┘ │
│ [Send] │
├─────────────────────────────────────────────────────┤
│ Ready Messages: 3│
└─────────────────────────────────────────────────────┘Message Styling
.win95-message-center {
height: 400px;
display: flex;
flex-direction: column;
}
.win95-message-list {
flex: 1;
overflow-y: auto;
background: white;
border: 2px inset var(--win95-gray);
padding: 4px;
}
.win95-message {
margin-bottom: 8px;
font-size: 11px;
}
.win95-message-header {
font-weight: bold;
color: var(--win95-title-dark);
border-bottom: 1px solid var(--win95-shadow);
padding-bottom: 2px;
margin-bottom: 4px;
}
.win95-message-body {
padding-left: 8px;
}
.win95-message-input {
display: flex;
gap: 4px;
padding: 4px;
border-top: 2px solid var(--win95-shadow);
}
.win95-message-input input {
flex: 1;
}---
Balloon Tooltips (System Tray Notifications)
For non-intrusive AI suggestions:
┌─────────────────────────┐
│ 💡 Assistant │
│ ─────────────────── │
│ You have 3 unread │
│ suggestions waiting. │
│ │
│ Click here to view. │
└─────────────────────────┘
△
[🔔] [📶] [🔋] 3:45 PM.win95-balloon {
position: absolute;
bottom: 36px;
right: 8px;
width: 200px;
background: #ffffe1; /* Tooltip yellow */
border: 1px solid var(--win95-dark-shadow);
padding: 8px;
font-size: 11px;
box-shadow: 2px 2px 0 var(--win95-shadow);
}
.win95-balloon::after {
content: '';
position: absolute;
bottom: -8px;
right: 20px;
border-left: 8px solid transparent;
border-right: 8px solid transparent;
border-top: 8px solid #ffffe1;
}
.win95-balloon-title {
font-weight: bold;
margin-bottom: 4px;
display: flex;
align-items: center;
gap: 4px;
}---
Error and Confirmation Dialogs
AI responses that need user action:
┌─ Error ──────────────────────────────────────[×]─┐
│ │
│ ╔════╗ │
│ ║ ⛔ ║ The assistant encountered an error. │
│ ╚════╝ │
│ │
│ Would you like to try again? │
│ │
│ [Retry] [Cancel] [Details >>] │
└───────────────────────────────────────────────────┘Icon Mapping
| Intent | Win95 Icon | Modern Equivalent |
|---|---|---|
| Error | ⛔ (red circle with X) | ❌ |
| Warning | ⚠️ (yellow triangle) | ⚠️ |
| Question | ❓ (blue question mark) | ❓ |
| Info | ℹ️ (blue i in circle) | ℹ️ |
| Success | ✅ (green checkmark) | ✅ |
---
Animated Characters
Win95 assistants had idle animations. Modern web equivalent:
.win95-assistant-avatar {
width: 64px;
height: 64px;
animation: assistant-idle 2s ease-in-out infinite;
}
@keyframes assistant-idle {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-2px); }
}
.win95-assistant-avatar.thinking {
animation: assistant-think 0.5s ease-in-out infinite;
}
@keyframes assistant-think {
0%, 100% { transform: rotate(0deg); }
25% { transform: rotate(-5deg); }
75% { transform: rotate(5deg); }
}
.win95-assistant-avatar.celebrating {
animation: assistant-celebrate 0.3s ease-in-out 3;
}
@keyframes assistant-celebrate {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.1); }
}---
Voice/Audio Patterns
Win95 had system sounds. Map to AI events:
| Event | Win95 Sound | Modern Equivalent |
|---|---|---|
| Message received | ding.wav | Notification chime |
| Error | chord.wav | Error tone |
| Success | tada.wav | Success fanfare |
| Thinking | None (but could add) | Subtle processing sound |
| Assistant appears | whoosh | Pop-in sound |
const sounds = {
message: new Audio('/sounds/ding.wav'),
error: new Audio('/sounds/chord.wav'),
success: new Audio('/sounds/tada.wav'),
};
function playSound(type) {
if (sounds[type]) {
sounds[type].currentTime = 0;
sounds[type].play();
}
}Win95 Component Library
Complete CSS implementations for all Windows 95 UI components.
CSS Variables (Required)
:root {
/* Core palette */
--win95-desktop: #008080;
--win95-gray: #c0c0c0;
--win95-title-dark: #000080;
--win95-title-light: #1084d0;
--win95-button-face: #dfdfdf;
--win95-highlight: #ffffff;
--win95-shadow: #808080;
--win95-dark-shadow: #000000;
--win95-window-bg: #ffffff;
--win95-selection: #000080;
--win95-selection-text: #ffffff;
/* Typography */
--font-win95-ui: 'Tahoma', 'Segoe UI', 'Arial', sans-serif;
--font-win95-mono: 'Fixedsys Excelsior', 'Courier New', monospace;
/* Spacing */
--win95-spacing-xs: 2px;
--win95-spacing-sm: 4px;
--win95-spacing-md: 8px;
--win95-spacing-lg: 16px;
}---
Window Frame
.win95-window {
background: var(--win95-gray);
border: 2px solid;
border-color: var(--win95-highlight) var(--win95-dark-shadow)
var(--win95-dark-shadow) var(--win95-highlight);
box-shadow:
inset 1px 1px 0 var(--win95-button-face),
inset -1px -1px 0 var(--win95-shadow);
display: flex;
flex-direction: column;
}
.win95-window-titlebar {
background: linear-gradient(90deg, var(--win95-title-dark) 0%, var(--win95-title-light) 100%);
color: white;
font-family: var(--font-win95-ui);
font-weight: bold;
font-size: 11px;
padding: 2px 4px;
display: flex;
align-items: center;
justify-content: space-between;
user-select: none;
}
.win95-window-titlebar.inactive {
background: linear-gradient(90deg, #808080 0%, #b5b5b5 100%);
}
.win95-window-title {
display: flex;
align-items: center;
gap: 4px;
overflow: hidden;
}
.win95-window-title img {
width: 16px;
height: 16px;
}
.win95-window-title span {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.win95-window-controls {
display: flex;
gap: 2px;
}
.win95-window-content {
flex: 1;
background: var(--win95-window-bg);
margin: 2px;
overflow: auto;
}
.win95-window-statusbar {
background: var(--win95-gray);
border-top: 1px solid var(--win95-shadow);
padding: 2px 4px;
font-size: 11px;
display: flex;
justify-content: space-between;
}---
Window Control Buttons
.win95-control-btn {
width: 16px;
height: 14px;
background: var(--win95-gray);
border: none;
font-size: 9px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
box-shadow:
inset -1px -1px 0 var(--win95-dark-shadow),
inset 1px 1px 0 var(--win95-highlight),
inset -2px -2px 0 var(--win95-shadow),
inset 2px 2px 0 var(--win95-button-face);
}
.win95-control-btn:active {
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight);
padding-top: 1px;
padding-left: 1px;
}
/* Using Unicode for button icons (web-safe) */
.win95-btn-minimize::before { content: '−'; }
.win95-btn-maximize::before { content: '□'; }
.win95-btn-restore::before { content: '❐'; font-size: 8px; }
.win95-btn-close::before { content: '×'; }---
Buttons
Standard Button
.win95-button {
background: var(--win95-gray);
border: none;
padding: 4px 12px;
font-family: var(--font-win95-ui);
font-size: 11px;
cursor: pointer;
box-shadow:
inset -1px -1px 0 var(--win95-dark-shadow),
inset 1px 1px 0 var(--win95-highlight),
inset -2px -2px 0 var(--win95-shadow),
inset 2px 2px 0 var(--win95-button-face);
}
.win95-button:active {
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight);
padding: 5px 11px 3px 13px; /* Shift content */
}
.win95-button:focus {
outline: 1px dotted var(--win95-dark-shadow);
outline-offset: -4px;
}
.win95-button:disabled {
color: var(--win95-shadow);
text-shadow: 1px 1px 0 var(--win95-highlight);
cursor: not-allowed;
}Default Button (with focus ring)
.win95-button-default {
outline: 1px solid var(--win95-dark-shadow);
outline-offset: -4px;
}
.win95-button-default:focus {
outline: 1px dotted var(--win95-dark-shadow);
}---
Form Elements
Text Input
.win95-input {
background: var(--win95-window-bg);
border: none;
padding: 4px 6px;
font-family: var(--font-win95-ui);
font-size: 11px;
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight),
inset 2px 2px 0 var(--win95-shadow);
}
.win95-input:focus {
outline: none;
}
.win95-input:disabled {
background: var(--win95-gray);
color: var(--win95-shadow);
}Textarea
.win95-textarea {
background: var(--win95-window-bg);
border: none;
padding: 4px 6px;
font-family: var(--font-win95-mono);
font-size: 12px;
resize: both;
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight),
inset 2px 2px 0 var(--win95-shadow);
}Checkbox
.win95-checkbox {
display: flex;
align-items: center;
gap: 6px;
cursor: pointer;
font-family: var(--font-win95-ui);
font-size: 11px;
}
.win95-checkbox input {
appearance: none;
width: 13px;
height: 13px;
background: var(--win95-window-bg);
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight),
inset 2px 2px 0 var(--win95-shadow);
cursor: pointer;
}
.win95-checkbox input:checked {
background: var(--win95-window-bg) url('data:image/svg+xml,...') center no-repeat;
/* Use checkmark SVG or Unicode ✓ */
}
.win95-checkbox input:checked::after {
content: '✓';
font-size: 11px;
font-weight: bold;
display: flex;
align-items: center;
justify-content: center;
}Radio Button
.win95-radio {
display: flex;
align-items: center;
gap: 6px;
cursor: pointer;
font-family: var(--font-win95-ui);
font-size: 11px;
}
.win95-radio input {
appearance: none;
width: 12px;
height: 12px;
border-radius: 50%;
background: var(--win95-window-bg);
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight),
inset 2px 2px 0 var(--win95-shadow);
cursor: pointer;
}
.win95-radio input:checked::after {
content: '';
display: block;
width: 4px;
height: 4px;
background: var(--win95-dark-shadow);
border-radius: 50%;
margin: 4px;
}Select Dropdown
.win95-select {
background: var(--win95-window-bg);
border: none;
padding: 2px 20px 2px 4px;
font-family: var(--font-win95-ui);
font-size: 11px;
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight),
inset 2px 2px 0 var(--win95-shadow);
background-image: url('data:image/svg+xml,...'); /* Down arrow */
background-repeat: no-repeat;
background-position: right 4px center;
appearance: none;
cursor: pointer;
}---
Menu Bar
.win95-menubar {
background: var(--win95-gray);
border-bottom: 1px solid var(--win95-shadow);
padding: 2px;
display: flex;
font-family: var(--font-win95-ui);
font-size: 11px;
}
.win95-menubar-item {
padding: 2px 8px;
cursor: pointer;
}
.win95-menubar-item:hover,
.win95-menubar-item.active {
background: var(--win95-selection);
color: var(--win95-selection-text);
}
.win95-menu-dropdown {
position: absolute;
top: 100%;
left: 0;
background: var(--win95-gray);
border: 2px solid;
border-color: var(--win95-highlight) var(--win95-dark-shadow)
var(--win95-dark-shadow) var(--win95-highlight);
box-shadow: 2px 2px 0 var(--win95-dark-shadow);
min-width: 150px;
z-index: 100;
}
.win95-menu-item {
padding: 4px 24px 4px 24px;
display: flex;
justify-content: space-between;
cursor: pointer;
}
.win95-menu-item:hover {
background: var(--win95-selection);
color: var(--win95-selection-text);
}
.win95-menu-separator {
height: 1px;
background: var(--win95-shadow);
margin: 4px 2px;
}
.win95-menu-item-shortcut {
color: var(--win95-shadow);
margin-left: 16px;
}
.win95-menu-item:hover .win95-menu-item-shortcut {
color: var(--win95-selection-text);
}---
Toolbar
.win95-toolbar {
background: var(--win95-gray);
border-bottom: 1px solid var(--win95-shadow);
padding: 2px 4px;
display: flex;
gap: 2px;
align-items: center;
}
.win95-toolbar-button {
width: 24px;
height: 22px;
background: var(--win95-gray);
border: 1px solid transparent;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.win95-toolbar-button:hover {
border-color: var(--win95-highlight) var(--win95-shadow)
var(--win95-shadow) var(--win95-highlight);
}
.win95-toolbar-button:active {
border-color: var(--win95-shadow) var(--win95-highlight)
var(--win95-highlight) var(--win95-shadow);
padding-top: 1px;
padding-left: 1px;
}
.win95-toolbar-separator {
width: 2px;
height: 20px;
margin: 0 4px;
border-left: 1px solid var(--win95-shadow);
border-right: 1px solid var(--win95-highlight);
}---
Tabs
.win95-tabs {
display: flex;
flex-direction: column;
}
.win95-tab-list {
display: flex;
padding-left: 4px;
}
.win95-tab {
padding: 4px 12px;
background: var(--win95-gray);
border: 1px solid;
border-color: var(--win95-highlight) var(--win95-shadow)
transparent var(--win95-highlight);
border-bottom: none;
margin-right: -1px;
cursor: pointer;
font-family: var(--font-win95-ui);
font-size: 11px;
position: relative;
top: 1px;
}
.win95-tab.active {
background: var(--win95-gray);
border-bottom: 1px solid var(--win95-gray);
z-index: 1;
}
.win95-tab-panel {
background: var(--win95-gray);
border: 1px solid;
border-color: var(--win95-highlight) var(--win95-shadow)
var(--win95-shadow) var(--win95-highlight);
padding: 16px;
}---
Progress Bar
.win95-progress {
height: 16px;
background: var(--win95-gray);
box-shadow:
inset 1px 1px 0 var(--win95-shadow),
inset -1px -1px 0 var(--win95-highlight);
padding: 2px;
}
.win95-progress-bar {
height: 100%;
background: var(--win95-selection);
background-image: repeating-linear-gradient(
90deg,
var(--win95-selection) 0px,
var(--win95-selection) 8px,
transparent 8px,
transparent 10px
);
}---
Scrollbars
/* Custom scrollbar styling */
.win95-scrollable::-webkit-scrollbar {
width: 16px;
height: 16px;
}
.win95-scrollable::-webkit-scrollbar-track {
background: repeating-linear-gradient(
45deg,
var(--win95-gray) 0px,
var(--win95-gray) 2px,
var(--win95-shadow) 2px,
var(--win95-shadow) 4px
);
}
.win95-scrollable::-webkit-scrollbar-thumb {
background: var(--win95-gray);
box-shadow:
inset -1px -1px 0 var(--win95-dark-shadow),
inset 1px 1px 0 var(--win95-highlight),
inset -2px -2px 0 var(--win95-shadow),
inset 2px 2px 0 var(--win95-button-face);
}
.win95-scrollable::-webkit-scrollbar-button {
background: var(--win95-gray);
box-shadow:
inset -1px -1px 0 var(--win95-dark-shadow),
inset 1px 1px 0 var(--win95-highlight);
display: block;
height: 16px;
width: 16px;
}---
Group Box (Fieldset)
.win95-groupbox {
border: 1px solid var(--win95-shadow);
border-top: 1px solid var(--win95-highlight);
padding: 16px;
margin: 8px 0;
}
.win95-groupbox legend {
background: var(--win95-gray);
padding: 0 4px;
font-family: var(--font-win95-ui);
font-size: 11px;
}---
List View
.win95-listview {
background: var(--win95-window-bg);
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight),
inset 2px 2px 0 var(--win95-shadow);
padding: 2px;
overflow: auto;
}
.win95-listview-item {
padding: 2px 4px;
display: flex;
align-items: center;
gap: 4px;
cursor: pointer;
font-family: var(--font-win95-ui);
font-size: 11px;
}
.win95-listview-item:hover {
background: var(--win95-selection);
color: var(--win95-selection-text);
}
.win95-listview-item.selected {
background: var(--win95-selection);
color: var(--win95-selection-text);
}
.win95-listview-item img {
width: 16px;
height: 16px;
}---
Tree View
.win95-treeview {
background: var(--win95-window-bg);
box-shadow:
inset 1px 1px 0 var(--win95-dark-shadow),
inset -1px -1px 0 var(--win95-highlight),
inset 2px 2px 0 var(--win95-shadow);
padding: 4px;
font-family: var(--font-win95-ui);
font-size: 11px;
}
.win95-treeview-node {
padding-left: 16px;
}
.win95-treeview-item {
display: flex;
align-items: center;
gap: 4px;
padding: 1px 4px;
cursor: pointer;
}
.win95-treeview-item:hover {
background: var(--win95-selection);
color: var(--win95-selection-text);
}
.win95-treeview-toggle {
width: 9px;
height: 9px;
border: 1px solid var(--win95-shadow);
background: var(--win95-window-bg);
display: flex;
align-items: center;
justify-content: center;
font-size: 8px;
cursor: pointer;
}
.win95-treeview-toggle::before {
content: '+';
}
.win95-treeview-toggle.expanded::before {
content: '−';
}---
Tooltip
.win95-tooltip {
position: absolute;
background: #ffffe1; /* Tooltip yellow */
border: 1px solid var(--win95-dark-shadow);
padding: 4px 8px;
font-family: var(--font-win95-ui);
font-size: 11px;
white-space: nowrap;
pointer-events: none;
z-index: 1000;
}---
Desktop Icons
.win95-desktop-icons {
display: grid;
grid-template-columns: repeat(auto-fill, 75px);
gap: 8px;
padding: 8px;
}
.win95-desktop-icon {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
padding: 4px;
cursor: pointer;
text-align: center;
}
.win95-desktop-icon img {
width: 32px;
height: 32px;
filter: drop-shadow(1px 1px 0 rgba(0,0,0,0.5));
}
.win95-desktop-icon span {
font-family: var(--font-win95-ui);
font-size: 11px;
color: white;
text-shadow: 1px 1px 0 black;
word-break: break-word;
max-width: 70px;
}
.win95-desktop-icon.selected span {
background: var(--win95-selection);
color: var(--win95-selection-text);
text-shadow: none;
}
.win95-desktop-icon:focus {
outline: 1px dotted white;
}Mobile: The Pocket PC Paradigm
How to make Windows 95 responsive for modern mobile devices.
Core Philosophy
Win95 on mobile isn't about shrinking desktop—it's reimagining the pocket computer that Windows CE hinted at. The paradigm is "desktop in your pocket," not "app drawer with icons."
Key principles: 1. Start button stays - Bottom-left, always visible 2. Taskbar is navigation - Shows open "programs" 3. Desktop is home - Icon grid, not infinite scroll 4. Windows stack - Modal overlays, not swipe navigation 5. Status bar = System tray - Notifications, clock, battery
---
Layout Architecture
Mobile Viewport (< 640px)
┌────────────────────────────┐
│ ● ○ ○ 📶 🔋 3:45 │ ← System tray (status bar)
├────────────────────────────┤
│ │
│ ┌────┐ ┌────┐ ┌────┐ │
│ │ 📁 │ │ 🌐 │ │ ⚙️ │ │
│ │File│ │Web │ │Set │ │
│ └────┘ └────┘ └────┘ │
│ │ ← Desktop (scrollable icon grid)
│ ┌────┐ ┌────┐ ┌────┐ │
│ │ 💬 │ │ 📧 │ │ 📅 │ │
│ │Chat│ │Mail│ │Cal │ │
│ └────┘ └────┘ └────┘ │
│ │
│ ┌────┐ │
│ │ 🗑️ │ │
│ │Bin │ │
│ └────┘ │
│ │
├────────────────────────────┤
│ [Start] [📧3] [💬] [📁] │ ← Taskbar with open apps
└────────────────────────────┘CSS Grid Implementation
.win95-mobile-layout {
display: grid;
grid-template-rows: 24px 1fr 32px;
height: 100vh;
height: 100dvh; /* Dynamic viewport for mobile */
background: var(--win95-desktop);
}
.win95-system-tray {
background: var(--win95-gray);
border-bottom: 2px solid var(--win95-shadow);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 8px;
font-size: 11px;
}
.win95-desktop-mobile {
display: grid;
grid-template-columns: repeat(auto-fill, 64px);
gap: 8px;
padding: 16px;
align-content: start;
overflow-y: auto;
}
.win95-taskbar-mobile {
background: var(--win95-gray);
border-top: 2px solid var(--win95-highlight);
display: flex;
align-items: center;
padding: 2px 4px;
gap: 2px;
overflow-x: auto;
}---
Start Menu (Mobile)
Slides up from bottom, full-width:
┌────────────────────────────┐
│ │
│ (Desktop dimmed) │
│ │
├────────────────────────────┤
│ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │ ← Drag handle
│ ╔════════════════════════╗ │
│ ║ W ║ │
│ ║ i Programs ▶ ║ │
│ ║ n ────────────────── ║ │
│ ║ d 📄 Documents ▶ ║ │
│ ║ o ⚙️ Settings ▶ ║ │
│ ║ w 🔍 Find ║ │
│ ║ s ❓ Help ║ │
│ ║ ────────────────── ║ │
│ ║ 9 🔌 Shut Down ║ │
│ ║ 5 ║ │
│ ╚════════════════════════╝ │
│ [🪟Start] │
└────────────────────────────┘Implementation
.win95-start-menu-mobile {
position: fixed;
bottom: 32px; /* Above taskbar */
left: 0;
right: 0;
max-height: 70vh;
background: var(--win95-gray);
border: 2px solid;
border-color: var(--win95-highlight) var(--win95-dark-shadow)
var(--win95-dark-shadow) var(--win95-highlight);
border-bottom: none;
transform: translateY(100%);
transition: transform 0.2s ease-out;
display: flex;
}
.win95-start-menu-mobile.open {
transform: translateY(0);
}
.win95-start-menu-sidebar-mobile {
width: 28px;
background: linear-gradient(0deg, #000080 0%, #1084d0 100%);
writing-mode: vertical-rl;
text-orientation: mixed;
transform: rotate(180deg);
color: white;
font-weight: bold;
font-size: 18px;
display: flex;
align-items: center;
justify-content: flex-end;
padding: 8px 4px;
}
.win95-start-menu-items-mobile {
flex: 1;
padding: 4px;
}
.win95-start-menu-item-mobile {
display: flex;
align-items: center;
gap: 12px;
padding: 8px 12px;
font-size: 13px;
touch-action: manipulation;
}
.win95-start-menu-item-mobile:active {
background: var(--win95-selection);
color: var(--win95-selection-text);
}---
Windows on Mobile
Windows become full-screen modals or bottom sheets:
Full-Screen Window
┌────────────────────────────┐
│ ≡ My Documents [−][×] │ ← Condensed title bar
├────────────────────────────┤
│ File Edit View Help │ ← Optional menu bar
├────────────────────────────┤
│ │
│ 📁 Folder 1 │
│ 📁 Folder 2 │
│ 📄 Document.txt │
│ 📄 Notes.doc │
│ │ ← Content area
│ │
│ │
│ │
│ │
├────────────────────────────┤
│ 4 objects 1.2 MB │ ← Status bar
└────────────────────────────┘Bottom Sheet Window
For dialogs, settings, quick actions:
┌────────────────────────────┐
│ │
│ (Previous content │
│ dimmed behind) │
│ │
├────────────────────────────┤
│ ═══════════════════════════│ ← Drag indicator
│ ┌─ Properties ─────────[×]┐│
│ │ ││
│ │ Name: Document.txt ││
│ │ Type: Text Document ││
│ │ Size: 1.2 KB ││
│ │ Modified: 1/31/2026 ││
│ │ ││
│ │ [ OK ] [Cancel] ││
│ └──────────────────────────┘│
└────────────────────────────┘Implementation
.win95-window-mobile {
position: fixed;
inset: 0;
background: var(--win95-gray);
display: flex;
flex-direction: column;
z-index: 100;
}
.win95-window-mobile-titlebar {
background: linear-gradient(90deg, #000080 0%, #1084d0 100%);
color: white;
padding: 4px 8px;
display: flex;
align-items: center;
justify-content: space-between;
min-height: 28px;
}
.win95-bottom-sheet {
position: fixed;
bottom: 0;
left: 0;
right: 0;
max-height: 60vh;
background: var(--win95-gray);
border: 2px solid;
border-color: var(--win95-highlight) var(--win95-dark-shadow)
transparent var(--win95-highlight);
border-radius: 8px 8px 0 0; /* Exception: rounded for touch */
transform: translateY(100%);
transition: transform 0.25s ease-out;
}
.win95-bottom-sheet.open {
transform: translateY(0);
}
.win95-bottom-sheet-handle {
width: 40px;
height: 4px;
background: var(--win95-shadow);
margin: 8px auto;
border-radius: 2px;
}---
Touch Adaptations
Larger Touch Targets
/* Minimum 44px touch targets (Apple HIG) */
.win95-touch-target {
min-height: 44px;
min-width: 44px;
}
/* Desktop icons on mobile */
.win95-desktop-icon-mobile {
width: 64px;
text-align: center;
padding: 8px;
}
.win95-desktop-icon-mobile img {
width: 32px;
height: 32px;
margin-bottom: 4px;
}
.win95-desktop-icon-mobile span {
font-size: 11px;
word-break: break-word;
line-height: 1.2;
}
/* Taskbar buttons */
.win95-taskbar-button-mobile {
min-width: 60px;
max-width: 80px;
height: 28px;
padding: 0 8px;
font-size: 10px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}Gestures Mapped to Win95 Actions
| Gesture | Win95 Equivalent | Action |
|---|---|---|
| Tap | Click | Select/Open |
| Long press | Right-click | Context menu |
| Swipe up from bottom | Start button | Open Start menu |
| Swipe down from top | — | System tray (notifications) |
| Pinch | — | Not supported (no zoom) |
| Two-finger tap | Right-click | Context menu |
// Swipe up for Start menu
let startY = 0;
document.addEventListener('touchstart', (e) => {
if (e.touches[0].clientY > window.innerHeight - 50) {
startY = e.touches[0].clientY;
}
});
document.addEventListener('touchend', (e) => {
if (startY > 0) {
const endY = e.changedTouches[0].clientY;
if (startY - endY > 50) {
openStartMenu();
}
startY = 0;
}
});---
Responsive Breakpoints
| Breakpoint | Metaphor | Layout Changes |
|---|---|---|
| < 480px | Pocket PC | Single column, large icons, simplified menu |
| 480-640px | Small tablet | 2-column icons, condensed taskbar |
| 640-1024px | Tablet landscape | Side-by-side windows possible |
| > 1024px | Desktop | Full Win95 experience |
/* Pocket PC */
@media (max-width: 479px) {
.win95-desktop-mobile {
grid-template-columns: repeat(3, 1fr);
}
.win95-taskbar-button-mobile {
display: none; /* Only show icons */
}
.win95-taskbar-button-mobile .icon {
display: block;
}
}
/* Small tablet */
@media (min-width: 480px) and (max-width: 639px) {
.win95-desktop-mobile {
grid-template-columns: repeat(4, 1fr);
}
}
/* Tablet landscape */
@media (min-width: 640px) and (max-width: 1023px) {
.win95-mobile-layout {
grid-template-columns: 1fr 1fr;
}
.win95-window-mobile {
position: relative;
max-width: 50vw;
}
}
/* Desktop */
@media (min-width: 1024px) {
/* Switch to full desktop layout */
.win95-mobile-layout {
display: none;
}
.win95-desktop-layout {
display: block;
}
}---
Taskbar Overflow
When too many apps are open:
.win95-taskbar-mobile {
overflow-x: auto;
scrollbar-width: none;
-ms-overflow-style: none;
}
.win95-taskbar-mobile::-webkit-scrollbar {
display: none;
}
/* Fade indicators for scroll */
.win95-taskbar-mobile::before,
.win95-taskbar-mobile::after {
content: '';
position: absolute;
top: 0;
bottom: 0;
width: 20px;
pointer-events: none;
}
.win95-taskbar-mobile::before {
left: 60px; /* After Start button */
background: linear-gradient(90deg, var(--win95-gray), transparent);
}
.win95-taskbar-mobile::after {
right: 60px; /* Before system tray */
background: linear-gradient(-90deg, var(--win95-gray), transparent);
}---
System Tray (Mobile)
Notifications and status icons:
┌────────────────────────────┐
│ 🔔 3 📶 🔋85% 3:45 PM │
└────────────────────────────┘Tap to expand:
┌────────────────────────────┐
│ │
│ (Desktop dimmed) │
│ │
├────────────────────────────┤
│ ┌─ Notifications ───────┐ │
│ │ │ │
│ │ 📧 New email from John │ │
│ │ 2 minutes ago │ │
│ │ ────────────────────── │ │
│ │ 💬 Chat message │ │
│ │ 5 minutes ago │ │
│ │ ────────────────────── │ │
│ │ 📅 Meeting in 15 min │ │
│ │ Calendar reminder │ │
│ │ │ │
│ │ [Clear All] │ │
│ └────────────────────────┘ │
├────────────────────────────┤
│ 🔔 3 📶 🔋85% 3:45 PM │
└────────────────────────────┘.win95-notification-panel {
position: fixed;
top: 24px;
left: 0;
right: 0;
max-height: 50vh;
background: var(--win95-gray);
border: 2px solid;
border-color: var(--win95-highlight) var(--win95-dark-shadow)
var(--win95-dark-shadow) var(--win95-highlight);
overflow-y: auto;
z-index: 200;
}
.win95-notification-item {
padding: 12px;
border-bottom: 1px solid var(--win95-shadow);
display: flex;
gap: 12px;
}
.win95-notification-item:active {
background: var(--win95-selection);
color: var(--win95-selection-text);
}---
Performance Considerations
1. Reduce animations - Win95 was snappy, not animated 2. Minimize shadows - Hard pixel shadows only 3. Use system fonts - Tahoma, Arial (fast rendering) 4. Avoid gradients except title bars - Flat colors render faster 5. Lazy load windows - Only render visible content
@media (prefers-reduced-motion: reduce) {
.win95-start-menu-mobile,
.win95-bottom-sheet,
.win95-window-mobile {
transition: none;
}
}
/* Optimize for touch scrolling */
.win95-scrollable {
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}